1

あるサーバーから別のサーバーにファイルをコピーするバッチ ファイルを作成しましたが、コピーしたばかりのファイルの名前を変更してフォルダー パスを含める必要があります。仕事をするために私が思いついたコードは次のとおりです。

ECHO OFF

SETLOCAL EnableDelayedExpansion

set include=*.log

FOR /L %%i IN (1,2,3) DO (

    net use i: \\my-server%%i\d$\IISLogs

    FOR /R i:\ %%G IN (%include%) DO (

        XCOPY %%G D:\ServerLogsAndBackups\IIS\w%%i\
    )
7z a -t7z D:\ServerLogsAndBackups\IIS\w%%i\files%%i.7z *.log -mx9

net use i: /delete

)

ファイルは次のようなものから来ます:

i:\w3svc98435783475\ex110430.log

私がやりたいことは、それを D:\ServerLogsAndBackups\IIS\w1\w3svc98435783475_ex110430.log にコピーすることです。リモートのディレクトリパスを取得してファイル名に入れる方法がわかりません。

どうもありがとう

4

1 に答える 1

1

ファイルの深さが 1 フォルダーのみであることがわかっている場合は、次を使用できます。

ECHO OFF

SETLOCAL EnableDelayedExpansion

set include=*.log

FOR /L %%i IN (1,2,3) DO (

net use i: \\my-server%%i\d$\IISLogs

  FOR /R i:\ %%G IN (%include%) DO (

    FOR /F "tokens=1-2 delims=\" %%H IN ("%%~pnxG") DO (    

      XCOPY %%G D:\ServerLogsAndBackups\IIS\w%%i\%%H_%%I

    )

  )

7z a -t7z D:\ServerLogsAndBackups\IIS\w%%i\files%%i.7z *.log -mx9

net use i: /delete

)

ファイルが設定された数のフォルダーの深さである場合、必要に応じてトークンを調整し、XCOPY コマンドの最後に文字を追加できます (つまり、深さ 5 フォルダー: tokens=6 で、XCOPY コマンドでは %%H_% になります)。 %I_%%J_%%K_%%L_%%M)

ただし、フォルダーの深さが混在している場合は、これを実現するためにバッチ スクリプト以外の方法を検討したほうがよい場合があります。

于 2011-06-15T15:48:53.187 に答える