2014-01-14 36 views
0

感謝您提前提供任何幫助。雙FOR循環移動文件

我想製作一個批處理文件來移動某些文件夾中的文件。

只是有點背景。 我有一個文件夾,並如下面的結構:

C:\測試

  • APP1 \ app1.exe
  • APP2 \ app2.exe
  • APP3 \ app3.doc
  • XX [XX]的.exe
  • XX2 \ xx2.exe
  • XX3 \ xx3.EXE

換句話說,我有一個包含幾個子文件夾的文件夾,每個子目錄都有一些文件。我想要做的是使用腳本,循環所有文件夾,將包含「app」的所有文件移動到文件夾應用程序,然後將所有文件都包含「xx」到文件夾xx - 以儘量減少工作量,我已經創建這兩個文件夾,所以腳本不需要決定是否必須創建一個新的目錄。

下面是我的腳本,

@echo off 
rem loop xx 
FOR /r "C:\test\" %%G in (*xx*.*) DO (
Echo Found file - %%G 
copy %%G c:\testf\xx\ 
set pathname=%%G 
for %%K in ("%pathname%") do (set filepath=%%~dpK 
set filename=%%~nxK 
echo Filepath is %filepath% 
echo %filename% >> c:\output.log) 
echo full is %pathname%) 
rem loop app 
FOR /r "C:\test\" %%H in (*app*.*) DO (
Echo Found file - %%H 
copy %%H c:\testf\app\ 
set pathname=%%H 
for %%L in ("%pathname%") do (set filepath=%%~dpL 
set filename=%%~nxL 
echo Filepath is %filepath% 
echo %filename% >> c:\output.log) 
echo full is %pathname%) 
Echo "All Done" 

電流輸出日誌顯示

xx3.EXE 
xx3.EXE 
xx3.EXE 
app3.EXE 
app3.EXE 
app3.EXE 

和XX文件被送往只XX文件夾,但應用程序的文件didnt。 我可以幫助解決這個問題嗎?

我真的很感謝您能提供任何幫助。

回答

0

也許應用程序文件的路徑包含空格 - 除非包含引號,否則會破壞COPY命令。

你的腳本比需要複雜得多。內部循環沒有任何需要。您也可以通過使用循環來獲取兩個字符串來消除代碼。我會寫它像這樣得到相同的結果,用固定帶引號的COPY命令:

@echo off 
for %%A in (xx app) do (
    for /r "c:\test\" %%F in (*%%A*.*) do (
    echo Found file - %%F 
    copy "%%F" "c:\testf\%%A\" 
    echo Filepath is %%~dpF 
    echo %%~nxF >>c:\output.log 
    echo full is %%F 
) 
) 
echo "All Done" 

請注意,複製從多個源目錄相同的文件名到一個目標目錄將導致只有一個文件 - 最後一個複製勝利。

+0

嗨Dbenham,感謝您的幫助。我只是再次嘗試你的腳本,但我仍然得到「系統無法找到指定的路徑」循環xx文件後 - 所有的xx文件被正確地發送到xx文件夾,但應用程序文件似乎不是。再次感謝。 ps,輸出正確顯示,[xx] .EXE xx2.exe xx3.EXE app1.EXE app2.exe app3.EXE – Litan

0

您可以使用FIND來測試你的文件:

@echo off&cls 

for %%a in (xx app) do call:Treat %%a 

exit /b 
:Treat 
echo Treating : [%1] 
for /f "delims=" %%a in ('dir/a-d/b/s ^| find "%1"') do echo copy "%%a" "c:\test\%1" 

我把反響,您可以測試輸出副本之前。