我已经编写了一个批处理文件来将文件从一个服务器复制到另一个服务器,但是,我需要能够重命名刚刚复制的文件以包含文件夹路径。我想出的代码就是:
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中。我不确定如何将遥控器上的目录路径放入文件名中。
非常感谢答案 0 :(得分: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个文件夹深:标记= 6,在XCOPY命令中它将是% %H _ %%我_ %%Ĵ_ %% K表_ %%大号_ %% M)
但是,如果文件夹深度混合在一起,您可能最好不要使用批处理脚本以外的其他方法来实现此目的。