3

次のコードがあります。いくつかの問題を除いて、うまく機能します。まず、「空白でない場合」チェックがまったく機能しません。第二に、各反復中に、最後にサーバー名をサーバー名とフォルダーの両方として渡しますが、これは本当に理解できません...

コード

 SET servers=server01,server02
 SET drive=c
 SET root=program files (x86)\test\
 SET backup=%root%\backup 
 SET folders=folder01\,folder02\file01.txt


 FOR %%b in (%servers%) do (
    FOR %%a in (%folders% %%b) DO (
        if not %%a == "" call :backup %%b %%a
    )
 )


:backup
 SET currentfile="\\%1\%drive%$\%2"
 setlocal
 echo Backing Up %currentfile%
 REM mkdir "\\%1\%drive%$\%backup%"
 REM xcopy /I
 exit /b
 endlocal
 goto :end

出力

1] Backing Up "\\server01\c$\folder01\"
2] Backing Up "\\server01\c$\folder02\file01.txt"
3] Backing Up "\\server01\c$\server01"
4] Backing Up "\\server02\c$\folder01\"
5] Backing Up "\\server02\c$\folder02\file01.txt"
6] Backing Up "\\server02\c$\server02"
7] Backing Up "\\\c$\"

ご覧のとおり、3 行目、6 行目、7 行目は望ましくありません。

4

1 に答える 1

4

%%b3行目と6行目は、内側のforループが原因で発生します。7行目は、スクリプトがループ後に終了しないために発生します。そのため、スクリプトは:backup最後にもう一度コードを実行します。

以下は、望ましい結果をもたらすようです。

@echo off

SET servers=server01,server02
SET drive=c
SET root=program files (x86)\test\
SET backup=%root%\backup 
SET folders=folder01\,folder02\file01.txt


FOR %%b in (%servers%) do (
    FOR %%a in (%folders%) DO (
        rem echo a is %%a
        if not %%a == "" call :backup %%b %%a
    )
)

exit /b


:backup
SET currentfile="\\%1\%drive%$\%2"
setlocal
echo Backing Up %currentfile%
REM mkdir "\\%1\%drive%$\%backup%"
REM xcopy /I
endlocal
于 2012-08-03T19:58:55.210 に答える