2014-10-04 51 views
0

我很確定FOR命令將處理這個放置我似乎無法得到正確的語法(總是吸入編程)。通過子目錄,並創建一個文件的副本,如果它存在

我想通過所有的子目錄指定的父目錄下,如果dog.txt文件在該子目錄存在,使得它的一個副本叫cat.txt

這是我得到的最接近,但它的父目錄把cat.txt:

for /r %f in (dog.txt) do copy %f cat.txt 
+0

你真的在運行DOS而不是Windows?你是八十年代的時間旅行者嗎? – Barmar 2014-10-04 00:51:08

+0

@Barmar自動化是未來的事情不是從過去 – 2014-10-04 01:06:11

+0

我很樂於接受創意! – MikeDC 2014-10-04 01:48:07

回答

1

你很近,你只需要使用路徑從找到的文件也。還應該防止路徑/文件中有空格。在文件名中沒有通配符的情況下,您可能會發現for循環會嘗試複製到每個目錄中,無論是否存在文件,以避免添加通配符或使用(如果存在)。

for /r %f in (dog.txt) do if exist "%f" copy "%f" "%~dpfcat.txt" /y 

和一個警告,如果你把它放在bat文件中,你需要轉義%符號。

for /r %%f in (dog.txt) do if exist "%%f" copy "%%f" "%%~dpfcat.txt" /y 
+0

除非搜索條件包含某種通配符,否則這將無法正常工作 - 這是「for」命令的這種形式的限制。 – foxidrive 2014-10-07 10:12:38

+0

@foxidrive,我已經評論過通配符。但是,如果需要的是特定的文件名,那麼通配符將不起作用(可能會選擇額外的文件),並且檢查每個目錄中具有「if exists」的文件是更好的解決方案。 – 2014-10-07 13:07:07

+0

是的,'if exists'會過濾正確的文件。我的錯。 – foxidrive 2014-10-07 21:25:46

相關問題