2013-03-22 188 views
2

我試圖拼湊一個腳本,從文件中讀取服務器的列表,驅動器映射到每個人,建立一個文件夾,將文件複製到該文件夾​​,運行命令和結果輸出到該文件夾​​,讀取新文件的內容,在新的清單執行對每一個項目的命令,然後取消映射驅動器。批處理腳本不吃奶命令

我前兩個部分的工作,但是當我嘗試讀取從創建的.txt文件的項目,我不能讓的名字在我的命令來填充。這是醜陋的,但這裏是腳本和結果(我從我的本地工作c:\ temp文件夾到本地映射爲z遠程臨時文件夾:\ TEMP):

-----代碼 - ---

for /F "tokens=*" %%S in (servers.txt) do (
    net use Z: \\%%S\c$ /USER:domain\user PASSWORD 
    z: 
    md temp 
    c: 
    cd\ 
    cd temp 
    copy sdelete.exe z:\temp 
    wmic /NODE:"%%S" logicaldisk get name > z:\temp\disks.txt 
) 

for /F "tokens=*" %%D in (z:\temp\disks.txt) do (
    psexec.exe \\%%S c:\temp\sdelete -z %%D 
) 

c: 
cd temp 
net use z: /delete /y 

-----結束碼-----

該文件被創建,但結果爲最後部分是呼應爲: C:\溫度>爲/ (:\ TEMP \ disks.txt Z)做F 「令牌= *」 在%d(psexec.exe \%S C:\ TEMP \ sdelete -z%d)

作爲新手, 任何幫助,將不勝感激! 謝謝!

+0

mfm4aa的反應似乎是正確的。重點是'元變量'(如%% S)僅在創建它的'FOR'循環中有效。一旦循環結束,其值將消失。 – Magoo 2013-03-22 17:07:46

回答

-1

代替

for /F "tokens=*" %%D in (z:\temp\disks.txt) do (

嘗試

for /F "tokens=*" %%D in ('type z:\temp\disks.txt') do (
+0

感謝您的快速響應!這解決了驅動器盤符不填充的問題,但我還是不從劇本的第一部分得到服務器名稱上:C:\ TEMP>(psexec.exe \\%S C:\ TEMP \ sdelete -z C: ) 無法訪問%S: 文件名,目錄名或卷標語法不正確。 – user2200014 2013-03-22 16:55:48

+0

謝謝!我使用了這個和其他答案的組合來實現它。欣賞它! – user2200014 2013-03-22 19:24:00

0

試試這個:

for /F "tokens=*" %%S in (servers.txt) do (
net use Z: \\%%S\c$ /USER:domain\user PASSWORD 
z: 
md temp 
c: 
cd\ 
cd temp 
copy sdelete.exe z:\temp 
wmic /NODE:"%%S" logicaldisk get name > z:\temp\disks.txt 


for /F "tokens=*" %%D in (z:\temp\disks.txt) do (
psexec.exe \\%%S c:\temp\sdelete -z %%D 
) 
) 

c: 
cd temp 
net use z: /delete /y 
+0

非常好!我最終使用了這個,但是我仍然需要上面的答案,以便%% D之後的語法更改。謝謝! – user2200014 2013-03-22 19:23:17