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

Posted

技术标签:

【中文标题】在批处理脚本中搜索文件并处理这些文件?【英文标题】:Search for files in a batch script and process those files? 【发布时间】:2010-11-29 16:21:33 【问题描述】:

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

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

【问题讨论】:

Iterate all files in a directory using a 'for' loop的可能重复 【参考方案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

【讨论】:

【参考方案2】:

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

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

比摆弄分隔符要容易得多,并且让您免于运行dir

【讨论】:

这看起来是最干净的解决方案。我知道一定有什么诡计。我已经习惯了 *nix 脚本,这让事情变得容易多了。谢谢大家的信息。 嗯,它几乎不比 find/xargs 更复杂,恕我直言。【参考方案3】:

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

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

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

如果没有这个 delims 选项,/f 将做它应该做的事情,即通过在每个空格或制表符序列处拆分输入来解析输入。

【讨论】:

【参考方案4】:

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

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

【讨论】:

【参考方案5】:

您还可以安装 cygwin 来获得一个成熟的 Unix 风格的 shell,它带有可信赖的旧“find”命令,以及许多其他工具。例如,

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

【讨论】:

你让你的整个构建依赖于 cygwin 的存在。不大好。更不用说这项任务非常不需要它了。【参考方案6】:

您可以在 Windows 上使用 findutils - 它包括“find”和“xargs”

【讨论】:

以上是关于在批处理脚本中搜索文件并处理这些文件?的主要内容,如果未能解决你的问题,请参考以下文章

BAT自动批处理写一个脚本查找指定软件安装目录并启动软件

将输出重定向到日志文件并在同一批处理脚本中接受用户输入

我可以在批处理脚本中的一个“查找”命令中搜索多个字符串吗?

通过批处理文件自动化 cygwin

从批处理文件中读取网络路径并使用批处理文件脚本将其写入另一个批处理文件

如何在文件夹和子文件夹中执行批处理文件执行脚本?