jba*_*ter 8 windows-7 batch-file
我想要一个 .bat 文件获取 Visual Studio 项目中所有 *.XML 文件的列表到目前为止我尝试的是首先使用旧版本的 GREP:
SET TempName=%temp%\TEMP%RANDOM%.bat
c:\bin\grep.exe -i \.xml\^" MyProject.vcxproj >> %TempName%
Run Code Online (Sandbox Code Playgroud)
但随后我需要从该临时文件中获取文件名
我试过这样的事情
FOR /F "tokens=2 delims="" %%F IN (%TempName%) DO ECHO %%F
FOR /F "tokens=2 delims=^"" %%F IN (%TempName%) DO ECHO %%F
FOR /F 'tokens=2 delims="' %%F IN (%TempName%) DO ECHO %%F
Run Code Online (Sandbox Code Playgroud)
但它们都不起作用。似乎分隔符"被视为选项列表的结束引号,这就是为什么我试图^在第二次尝试时将其转义。
通常 FOR 选项括在引号内。如果您想使用引号作为选项的一部分,则必须去掉封闭引号。这意味着 CMD 解释器用作标记分隔符的所有字符都必须进行转义,包括空格和等号。引用也需要转义。
for /f tokens^=2^ delims^=^" %%F in ...
Run Code Online (Sandbox Code Playgroud)
同样的技术用于解决另一个常见问题 - 如何使用 FOR /F 并保留整行,而不管给定行的开头是什么字符。问题是 EOL 选项(默认为分号)。为了保证整条线路的保留,必须禁用 EOL。这里再次删除封闭引号,并且必须转义标记分隔符。
for /f delims^=^ eol^= %%F in ....
Run Code Online (Sandbox Code Playgroud)
DELIMS 设置为空是因为空格永远不会包含在 DELIMS 选项中,除非它是指定的最后一个选项。之后的下一个选项字符串字符EOL= 作为 EOL 字符。但在这种情况下,不存在下一个字符,因为空格没有被转义,也没有被引用。所以上面的语法同时禁用了 DELIMS 和 EOL。
| 归档时间: |
|
| 查看次数: |
21641 次 |
| 最近记录: |