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

)

该文件将来自以下内容:

我:\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 回答