我在目录中有一些带有注释的文件:
// _READONLY_
我想使用批处理脚本将所有这些文件设置为只读。
我发现这个命令可以设置只读状态:
attrib +r
我知道有一个findstr
命令,但我正在努力将两者串联起来(双关语:)来做我想做的事。
这是一个命令行和一个批处理脚本示例,它使用FOR /F循环为.txt
具有匹配"// _READONLY_"
字符串的单个目录中的所有文件设置只读属性。
这里要提到的几件事是......
的FOR /F
选项块使用:
作为分隔符来分割每个迭代该值
在FOR /F
选项框用途1
和2
令牌到每个前得到的值:
每次迭代-这样的驱动器号值与没有结肠行进,并与没有结肠前减去驱动的完整文件路径信,以用作%a
和%b
在这些实施例
该FOR /F
命令的参数块放冒号:
所述第一和第二令牌值之间再次创建的文件路径,因为它被分裂对结肠和它的其它方式省略
attrib +r
命令如何处理每个匹配的文件,它将连接%a
值、冒号,并且%b
之间没有空格(例如%a:%b
)将 aFOR /R
混入并将每个递归子目录值传递给一个处理FOR /F
命令,以在所有这些子目录中搜索.txt
包含匹配字符串的文件
一个递归错误
FINDSTR
和一个FOR /R
减轻......
FINDSTR
应该能够使用该/S
选项递归目录树。但是如果您的文件系统启用了短名称,则有一个令人讨厌的错误可能会导致某些文件被跳过。请参阅Windows FINDSTR 命令有哪些未记录的功能和限制?了解更多信息。在该答案中查找部分标题“ BUG - Short 8.3 filenames can break the /D and /S option s” 。–德本纳姆
注意:第一行命令FOR /F
是获取所有父级文件夹文件。第二行命令FOR /R
是获取子文件夹及其文件以及父文件夹下的所有内容。
FOR /F "DELIMS=: TOKENS=1,2" %a IN ('findstr C:"// _READONLY_" "C:\Folder\Path\*.txt"') DO attrib +r "%a:%b"
FOR /R "C:\Folder\Path\" %D IN (.) DO (FOR /F "DELIMS=: TOKENS=1,2" %a IN ('findstr C:"// _READONLY_" "%~fdD\*.txt"') DO (attrib +r "%~a:%~b"))
注:双了百分号%%
批处理脚本FOR
循环变量占位符%%a
和%%b
-SO一个命令行运行的批处理脚本通常是用简单FOR
的循环。
FOR /F "DELIMS=: TOKENS=1,2" %%a IN ('findstr C:"// _READONLY_" "C:\Folder\Path\*.txt"') DO attrib +r "%%a:%%b"
FOR /R "C:\Folder\Path\" %%D IN (.) DO (
FOR /F "DELIMS=: TOKENS=1,2" %%a IN ('findstr C:"// _READONLY_" "%%~fdD\*.txt"') DO (
attrib +r "%%~a:%%~b"))
FOR /?
FOR /F ["options"] %variable IN (`command`) DO command [command-parameters] delims=xxx - specifies a delimiter set. This replaces the default delimiter set of space and tab. tokens=x,y,m-n - specifies which tokens from each line are to be passed to the for body for each iteration. This will cause additional variable names to be allocated. The m-n form is a range, specifying the mth through the nth tokens. If the last character in the tokens= string is an asterisk, then an additional variable is allocated and receives the remaining text on the line after the last token parsed. In addition, substitution of FOR variable references has been enhanced. You can now use the following optional syntax: %~I - expands %I removing any surrounding quotes (") %~fI - expands %I to a fully qualified path name %~dI - expands %I to a drive letter only
Findstr /?
/C:string Uses specified string as a literal search string
.
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句