2017-01-17 6 views
0

多くの場合、作業中のファイルを追跡しなければならないため、数千のリストから100を引き出す必要があります。そのため、バッチファイルディレクトリのcsvにリストされ、デスクトップのフォルダに貼り付けられます。サブディレクトリを含むファイルのリストをコピーするバッチファイル

これはうまくいきましたが、私は多くの場合、十数ディレクトリの何百ものファイルに対してこれを行う必要があったので、サブディレクトリを含めるように修正しようとしました。私は問題を抱えていて、StackOverflowの優秀な人たちが助けてくれるのだろうかと思っていました。ありがとう!問題の

@echo on 
set theDest="%USERPROFILE%\Desktop\Batch Copies %date:/=%" 
set /p MY_TEXT=<FileList.csv 
echo.%MY_TEXT% 
set MY_TEXT=%MY_TEXT:"",""=,% 
echo.%MY_TEXT% 
if not exist %theDest% md %theDest% 
pause 
for /R %MY_TEXT% %%G IN (.) do (
for /F "skip=1 delims=" %%f in (FileList.csv) do (
    if exist "%MY_TEXT%\%%f.*" (
     copy "%MY_TEXT%\%%f.*" %theDest% 
     ) else (
    if exist "%MY_TEXT%\%%f" (
     copy /R "%MY_TEXT%\%%f" %theDest% 
     ) else echo "%MY_TEXT%\%%f" does not exist && echo   0 file^(s^) copied. && echo  ERROR: %%f not found && echo. && pause) 



) 
) 
echo. && echo. && echo Process Completed. &&echo. 
pause 

パートは、私はちょうどので、私はおそらく1つ以上の方法を、それを台無しにしました私がこれを書いたときのバッチに入るし、それを左にして戻ってくると、すべてがどのように動作するかを把握しようとしていますしてさ。

答えて

0

したがって、FORループにはすべてのサブディレクトリで同じコマンドを実行する/ Rオプションがあります。あなたのケースでは

は、私はあなたがしたいと思う:

for /R %%a in (.) do call :MyCopyFunction %%a 
exit /B 

:MyCopyFunction [%1 is the current directory] 
    echo My Current directory is %1 
    [Do All your code here, using %1 as the current directory] 
exit /B 

私はあなたのスクリプトが詳細にやっていることを理解していないので、あなたはまだ詳細を記入する必要があります。

しかしこれは、ディレクトリ構造全体をどのようにトラバースするかを示しています。

+0

だから用/ R%MY_TEXT%%% G IN MyCopyFunction呼び出しを行う(。):MyCopyFunction を(FileList.csv)で%%のF "= 1 delims =スキップ"/Fのために行う \t存在する場合、「%% F *」( \t \tコピー "%% F。*" %theDest% \t \t)他( \t存在する場合は、 "%% F"( \t \tコピー "%% F" %theDest% \t \t ) – hype124

+0

申し訳ありませんが、私はそれを動作させることができませんでした。どのように現在のディレクトリに宣言せずに変数fを参照していますか? – hype124

+0

あなたは '/ R%MY_TEXT %%% G'のために書いています。私はなぜ '%MY_TEXT%'がループの途中にあるのか分かりません?? – abelenky

関連する問題