2013-03-22 147 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