2016-12-02 40 views
0

所以基本上我想編寫一個批處理文件,這樣我可以將一堆計算機名稱輸入到文本文件中,讓批處理文件名稱並將它們用作變量來設置robocopy的目的地。使用批處理將robocopy存儲到txt文件中的計算機地址

因此,像:

for (i = line of file.txt) 
if i != null then 
var(i) = dest 
robocopy src dest /e 

到目前爲止,我剽竊轉述了一些東西,我有以下

for /f "delims=" %%a in (c:\Users\test_list1.txt) 
    do set var=%%a&call :process 

    if [%%a] == [] do (
    Set src=(c:\folder\source.txt) 
    Set dest=%%a 
    robocopy %src% %dest% /e 

    :process 
    echo var=%var% 
    goto :eof 

我以前是在Java的合理可怕的,但我有點迷惘,寫了這個腳本。

不是說它非常相關,而是出於信息的緣故。我把minecraftedu複製到學校的30多臺機器上。我寧願使用另一種方法,但這裏設置的性質意味着我僅限於使用閃存驅動器或使用xcopy/robo手動啓動機器。

+0

你需要反轉'if' like'if not'(我想如果目的地不是什麼,你不想複製任何東西); 'if'塊沒有關閉')';然後刪除'src'值周圍的'()'... – aschipfl

回答

0

集 「SRC = C:\文件夾\的Source.txt」 FOR/F 「delims =」 %%一個在(C:\用戶\ test_list1.txt)做回聲%%一個&的xcopy「%SRC% 「」%% a \「/ s/e

應該是等效的。

你不會說爲什麼或者你是否使用你在僞代碼中建立的var數組,所以我放棄了它。

set語句中的引號可確保分配的值中不包含雜散的終端空間。 xcopy中的那些將字符串組合成兩個可識別的標記,以防一個或另一個包含像空格這樣的分隔符。

你的問題是:

do關鍵字及其以下(必須在同一個物理線爲for(有些情況下,事實並非如此,但規則和條例是一個簡單的太複雜解釋)

if語句中的%%a超出範圍。

%%a永遠不會沒有所以在任何情況下測試它是多餘的。

if聲明中沒有do。您的代碼將嘗試查找可執行文件,並執行do (,其中(只是一個字符。

(,即使do被刪除未終止。

似乎沒有理由將src重複設置爲相同的值,並且括號中有重要的部分值。

如果未終止的(:label之後的行預計爲代碼塊,則在代碼塊內分配的值不可訪問,而無需delayedexpansion

執行主線後,批次不會爲標籤賦予特殊含義。這只是一個標記 - 它並不意味着「程序」的結束。你需要在標籤前面執行一個goto :eof來跳過程序代碼,否則程序代碼將被執行「fall-through」

相關問題