我检查了几乎所有关于这个问题的其他问题,我已经尝试了所有这些但仍然没有成功,有人可以告诉我我做错了什么我得到错误“|此时没有预料到”运行时
@echo off
Setlocal EnableDelayedExpansion
set LOGFILE=pathBackup.csv
FOR /F "delims=" %%i IN ('time /t') DO set vtime2=%%i
IF NOT EXIST Logs mkdir Logs
echo DATE,TIME,HOSTNAME,CONNECTION,PATH > Logs\%LOGFILE%
FOR /F %%i in (clientList.txt) DO (
set _tempus=%%i
sc \\!_tempus! start remoteregistry > NUL
set RegCommand=reg query "\\!_tempus!\HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path
FOR /f "tokens=1,2* delims= " %%a in ('%RegCommand% ^| find "REG_"') do set vPath=%%c
echo %date%,%vtime2%,!_tempus!,Successful,%vPath% >> Logs\%LOGFILE%
sc \\!_tempus! stop remoteregistry > NUL
)
echo.
echo clientList.txt reading complete.
echo :::::::::::::::::::::::::::::::::
echo.
pause
clientList.txt只包含我想要连接的远程计算机的主机名/ IP地址。
LABORATORY1-PC
BRANCH3
UnknownnamePC
192.168.0.3
答案 0 :(得分:1)
嗯,这就是我不使用延迟扩展的方式。
@echo off
set regpath=HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
set regval=/v Path
set logfile=pathlog.txt
FOR /F "delims=" %%G in (clientList.txt) DO (
sc \\%%G start remoteregistry > NUL
FOR /f "tokens=1,2* delims= " %%H in ('reg query "\\%%G\%regpath%" %regval% ^| find "REG_"') do (
echo %date%,%time%,%%G,Successful,%%J >>logs\%LOGFILE%
)
sc \\%%G stop remoteregistry > NUL
)
答案 1 :(得分:1)
原样,代码中唯一的问题是RegCommand
变量的扩展。当它在for /f %%i
循环内被更改和重新引导时,您需要延迟扩展以检索其值。因为它没有被使用,解析器会替换没有任何内容的变量(进入循环之前变量中的值),因此for
命令中的命令直接从管道开始。
从%RegCommand%
更改为!RegCommand!
(扩展调用批处理中的变量)或更改为%%RegCommand%%
(以扩展spawn cmd
实例中的变量)应解决问题
但是不必处理它会好得多。 Squashman answer中的代码显示了对其进行编码的正确方法,而不需要通过直接使用for
可替换参数来延迟扩展。