批处理脚本问题分配映射文件名的变量值

时间:2015-02-25 14:42:18

标签: batch-file

我正在尝试编写一个批处理脚本,该脚本将登录到一堆xp计算机(来自提供的列表)并获取特定文件的文件修改信息。 (每个Pc上的文件和位置相同)

当脚本运行时,它完成并登录到每台PC ok,但由于某种原因,它将空值传递给%filename%,并在结果文件中获取文件修改信息所应的消息的回显。

问题似乎在于我的代码部分(完整脚本在底部):

set filename="G:\Documents and settings\user\desktop\samplefile.txt"
for %%C in (%filename%) DO (SET "bodytext=%bodytext%samplefile for %%A updated at %%~tC")
echo %bodytext% > results.txt

当我只运行上面的代码部分时,它可以工作,所以我假设当我映射到G驱动器并尝试设置文件名变量时它不起作用。

感谢任何想法或帮助。

由于

完整脚本

for /F "tokens=1,2 delims=," %%A in (list_of_machines.txt) do (
net use G: \\%%A\c$ /User:domain\user password
echo processing IP_Address=%%A Hostname=%%B >> results.txt

set filename="G:\Documents and settings\user\desktop\samplefile.txt"
for %%C in (%filename%) DO (SET "bodytext=%bodytext%samplefile for %%A updated at %%~tC")
echo %bodytext% > results.txt
net use G: / delete
)

3 个答案:

答案 0 :(得分:0)

打开命令提示符窗口,执行set /?并阅读输出帮助,特别是关于延迟环境变量扩展的部分,用于用于循环,用于

@echo off
setlocal EnableDelayedExpansion
for /F "tokens=1,2 delims=," %%A in (list_of_machines.txt) do (
    net use G: \\%%A\c$ /User:domain\user password
    echo processing IP_Address=%%A Hostname=%%B>>results.txt

    set "filename=G:\Documents and settings\user\desktop\samplefile.txt"
    for %%C in ("!filename!") DO (SET "bodytext=!bodytext!samplefile for %%A updated at %%~tC")
    echo !bodytext!>>results.txt
    net use G: /delete
)
endlocal

答案 1 :(得分:0)

wmic /node:"@%userprofile%\desktop\computername.txt" datafile where "name='C:\\windows\\win.ini'" get Lastmodified /format:csv

其中computername.txt是计算机名和/或IP地址的文件。

例如

computer1
127.0.0.1
computer2

答案 2 :(得分:0)

set filename="G:\Documents and settings\user\desktop\samplefile.txt"
for /F "tokens=1,2 delims=," %%A in (list_of_machines.txt) do (
net use G: \\%%A\c$ /User:domain\user password
echo processing IP_Address=%%A Hostname=%%B >> results.txt

for %%C in (%filename%) DO > results.txt echo %bodytext%samplefile for %%A updated at %%~tC
net use G: / delete
)

应该有用。

要点:

由于文件名是常量,因此将filename的设置移到for循环之外。在for循环中,%filename%(或任何其他%var%)被filename(或者相关var)的值替换为for已被解析。

您不能说出bodytext包含的内容,因此我假设您在发布代码执行之前已在脚本中设置了某些内容。

请注意在文本>results.txt之前使用echo。如果重定向器具有前导空格,则可以避免尾随空格。

??您确定>吗?如果你想累积文件,那么你>>如果你想要远程机器上的文件,那么你需要g:results.txt