我正在尝试编写一个批处理脚本,该脚本将登录到一堆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
)
答案 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