2009-09-19 71 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