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

Batch script issue assigning a variable value of mapped filename

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

当脚本 运行s 它完成并登录到每台 PC 时正常,但由于某种原因它向 %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
)

打开命令提示符 window,执行 set /? 并阅读输出帮助,尤其是有关在 for 循环中使用的延迟环境变量扩展部分和如果 块。

@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
wmic /node:"@%userprofile%\desktop\computername.txt" datafile where "name='C:\windows\win.ini'" get Lastmodified /format:csv

其中 computername.txt 是计算机名 and/or ip 地址的文件。

例如

computer1
127.0.0.1
computer2
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 包含什么,所以我假设它是在执行发布的代码之前在你的脚本中设置的。

请注意在要 echo 编辑的文本之前使用 >results.txt。如果重定向器具有前导 space.

,这将避免尾随 space

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