2014-08-29 49 views
0

循環運行多個我寫了一個連接到70個以上的Windows服務器(名單sis.txt),識別哪個是正確的證書,並將其複製到服務器的代碼。該證書模板的文件名是「hostname.pfx」,這是相同的爲「主機名」 + .PFX 的輸出指令的問題是,我可以在這個代碼中使用%%我只一次。目前,它根本不會運行第三行,或者至少不會將其輸出保存到名爲%filename%的變量中,因爲%% i已被分配給其他內容。我也試過%% g但沒有快樂。我不想把第三行的輸出保存到一個變量中,然後我可以在第6行使用它(xcopy命令)。由於hostname命令的輸出將是實際的主機名(server1-global),因此它會選擇正確的證書文件(server1-global.pfx)進行復制。 我知道這可能是一個屁股向後方法,但它是我能想出給該批次的語法和邏輯讓我頭疼和嘔吐幾乎是最好的。在批量

FOR /F %%i IN (sis.txt) DO(
ECHO %%i 
FOR /F %%i in ('PsExec.exe \\%%i -u myuser -p mypassword cmd /c hostname') do set filename=%%i 
ECHO %filename% 
START /Wait NET USE S: \\%%i\c$\transfer /USER:myuser mypassword 
xcopy U:\files\%filename%.pfx /e /k /Y S:\ 
NET USE S: /Delete /Y 
) 

回答

0
FOR /F %%i IN (sis.txt) DO (
ECHO %%i 
FOR /F %%q in ('PsExec.exe \\%%i -u myuser -p mypassword cmd /c hostname') do (
    set filename=%%q 
    ECHO %%q 
    START /Wait NET USE S: \\%%i\c$\transfer /USER:myuser mypassword 
    xcopy U:\files\%%q.pfx /e /k /Y S:\ 
    NET USE S: /Delete /Y 
) 
) 

這應該可以解決您的問題。在內環必須在變量是來自於外,其他批次(或任何其他語言,對於這個問題),不同的無法解析「我%%」你指的是哪個特定的。

除非你使用setlocal enabledelayedexpansion,環境變量的變化值不可用(容易)。

批量替換任何%varname% with the value of varname at the time the command is **parsed**, so your use of在塊語句(括號內的一系列語句)中%filename%註定要失敗。在解析外部循環時,它將被替換爲filename的值。

隨着setlocal enabledelayedexpansion線,那麼filename當前值可以通過使用!filename!訪問,但在你展示的情況下,這是沒有必要的 - filename設置爲內metavariable的值(我已經改變了到%%q) - 和%%q可以在你使用的表述取代(至少,可印刷的...)

批也可以是對空間敏感 - 和a的do關鍵字之前,需要一個空間for循環。

現在 - 如果要放置在文件名中的值/ %% Q含有空格,這可能需要一點調整,但你的避風港」告訴我們,所以我會離開它作爲一個簡單的警告。


編輯 - 需要一個額外的對括號爲for..%%q...do部分。如果沒有他們,只有set filename=%%q被執行,語句不是塊直至幷包括net use ... /delete...

+0

我已經試圖改變內部%% i到%%摹 - 這是發生了什麼: 'U:\ TransferFilesToProbes >( ECHO server1-global FOR/F%q in('PsExec.exe \\ server1-global -u myuser mypass cmd/c hostname')do set filename =%q ECHO%q 開始/等待NET USE S:\\ server1-global \ c $ \ transfer/USER:myuser mypassword xcopy U:\ files \%q.pfx/e/k/YS:\ NET USE S:/ Delete/Y' 它會更改%% q到%q,而不用實際填充需要的變量 – 2014-08-29 13:06:02

+0

你是對的。太糟糕了,來自這個列表的大多數機器似乎都不接受使用PsExec的登錄,說這個句柄是不正確的,但是您的解決方案在技術上是正確的。謝謝。 – 2014-08-29 14:37:31