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

什麼我想do將其複製到D:\ ServerLogsAndBackups \ IIS \ w1 \ w3svc98435783475_ex110430.log中。我不確定如何讓遙控器上的目錄路徑放入文件名。

千恩萬謝

回答

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 )

但是,如果有文件夾深度的組合,你可能會更好地考慮使用一些除了批處理腳本來完成這件事之外的事情。

+0

我得到這個:目的地在目標上指定了一個文件名還是目錄名(F = file,D = directory)?我顯然希望它成爲一個文件..你知道我可以壓制這個嗎? – Jarede 2011-06-15 16:09:43

+0

我在* xcopy的末尾添加了*,這似乎是在做伎倆(儘管我的文件現在以.log.log結尾),所以如果你有一個更好的解決方案,那麼你可以編輯你的文章?謝謝Mechaflash – Jarede 2011-06-15 16:21:10

+0

當通過%〜G擴展變量,其中G = FOR臨時變量時,可以在G之前使用一些參數。參數包括f =完整路徑名(即C:\ Path \ File.extension),d =驅動器(即C:\)p =路徑(即文件夾\文件夾),n =文件名W/O擴展名,x =擴展文件。 例如,我們有一個文件位於C:\ Documents and Settings \ User \ desktop \ file.txt,%%〜nxG僅表示文件名和擴展名(file.txt) %%〜pnxG表示路徑和文件名以及擴展名(文件和設置\用戶\桌面\文件.txt) – Mechaflash 2011-06-15 17:14:13

相關問題