在批处理脚本中搜索文件并处理这些文件?

时间:2009-09-19 04:02:46

标签: batch-file cmd

我正在尝试在visual studio项目的预构建阶段做一些事情。具体来说,我正在尝试在项目中的所有* .resx文件上执行一些命令。这是我所拥有的,但是当文件/目录路径中有空格时它不起作用。我如何绕过这些空间?

for /f %%a in ('dir /B /S *.resx') do echo "%%a"

6 个答案:

答案 0 :(得分:17)

您知道for也可以在目录上递归运行吗?

for /r %%x in (*.resx) do echo "%%x"

比摆弄分隔符更容易,并使您免于运行dir

答案 1 :(得分:4)

坚持使用shell的For文本解析器

for /f "delims=|" %%a in ('dir /B /S *.resx') do echo "%%a"

只需添加一个delims选项(对于显然不存在的delim字符),等等!

在缺少这个delims选项的情况下,/ f将执行它应该执行的操作,即通过在每个空格或制表符序列中拆分输入来解析输入。

答案 2 :(得分:2)

您可以将findutils用于Windows - 它包括“find”和“xargs”

答案 3 :(得分:2)

你也可以安装cygwin来获得一个完整的Unix-esque shell,它附带了可信赖的旧“find”命令,以及一堆其他工具。例如,

find . -name "*.resx" | xargs grep MyProjectName

答案 4 :(得分:2)

您遇到了无意中使用默认空格分隔符的问题。你可以通过重置这样的delim来解决这个问题:

for /f "delims=" %%a in ('dir /B /S *.resx') do echo "%%a"

答案 5 :(得分:1)

生成所有相关文件的简单文件列表以供以后处理

@echo create a results file…
if exist results.txt (del results.txt)
echo. >NUL 2>results.txt

@echo minimal recursive subdirectory search for filespec...
dir /s /a /b "*.resx" >>results.txt