2009-09-19 100 views
9

我试图在Visual Studio项目的建设前阶段做一些事情。具体来说,我试图在项目中的所有* .resx文件上执行一些命令。这是我所拥有的,但是当文件/目录路径中有一个空格时它不起作用。我如何绕过这些空间?搜索文件的批处理脚本和处理这些文件?

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

的[在一个目录使用for循环迭代中的所有文件(可能的复制https://stackoverflow.com/问题/ 138497 /迭代,所有有关文件正在使用-A-目录-A-for循环) – 2018-03-01 02:43:28

回答

14

你知道for也可以在目录中进行递归运行?

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

比带分隔符摆弄容易得多,从运行dir为您节省。

+0

这看起来像最干净的解决方案。我知道必须有一个窍门。我只是习惯于* nix脚本,而事情更容易。谢谢大家的信息。 – bsh152s 2009-09-19 12:20:40

+0

嗯,这比找到/ xargs的,恕我直言,很难比较绕口。 – Joey 2009-09-19 20:28:33

2

可以使用findutils的Windows - 它包括“发现”和“xargs的”

2

您还可以安装cygwin得到一个全面的类Unix式的外壳,其自带的可信赖岁“查找”命令,以及一堆其他工具。例如,

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

而你让你的整个构建依赖于cygwin的存在。不大好。更Let论这个任务非常不需要的事实。 – Joey 2009-09-19 07:03:34

4

棒与外壳

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

的对于文本解析器只需添加一个delims选项(一个DELIM字符,这显然是不可能存在的),等瞧!

在此由于缺少delims选项,/ F将做什么是应该的,即通过在每一个空间或标签序列分割解析它的输入。

2

您正在运行到疏忽造成使用默认的空间分隔符的。您可以修复通过重新像这样的delims:

for /f "delims=" %%a in ('dir /B /S *.resx') do echo "%%a" 
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