0 windows for-loop cmd batch-file psexec
所以我一直在研究这个批处理脚本一段时间,这是我写过的第一个.我们的想法是连接到我们域中的远程计算机并收集一些信息.
我正在使用一个带有机器IP地址的.txt文件,每行一个,每个用逗号分隔.
192.168.1.1,
192.168.1.2,
192.168.1.3
出于某种原因,一旦脚本到达文件中的最后一个IP地址,它就会查询一个空格.此空白区域是尾随空格字符吗?以及如何防止这种情况发生?
我目前获得脚本设置的方式意味着当计算机无法访问时,它会将消息回显给日志文件.所以每次我运行脚本时都会添加一条额外的行说"(BLANK SPACE) 机器无法访问 "我知道这只是一个小问题,但它让我烦恼.
这是我的代码
@echo off
title Audit Script
for /F %%i in (C:\testlist.txt) DO call :test %%i
:test
ping %1 > out.txt
find "Reply" out.txt > nul
if %ERRORLEVEL%==0 GOTO sysinf
if %ERRORLEVEL%==1 GOTO pingerror
:pingerror
echo %1 Unreachable
echo. >> C:\Computer-Audit.log
echo ########################################################## >> C:\Computer-Audit.log
echo MACHINE %1 was unreachable on the %date% at %time% >> C:\Computer-Audit.log
echo ########################################################## >> C:\Computer-Audit.log
echo. >> C:\Computer-Audit.log
GOTO :eof
:sysinf
psexec \\%1 -u Administrator -p g2m60gy -accepteula -nobanner -low -n 10 systeminfo | findstr "Host OS" >> C:\Computer-Audit.log
if %ErrorLevel% EQU 0 GOTO reg
if errorlevel 1 GOTO test
:reg
FOR /F "tokens=2*" %%A IN (
'psexec \\%1 -u Administrator -p g2m60gy -accepteula -nobanner -low -n 10 reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Betting Till_is1" /v DisplayVersion 2^> nul'
) DO SET DisplayName=%%B
echo Betting Till Version: %DisplayName% >> C:\Computer-Audit.log
Run Code Online (Sandbox Code Playgroud)
这是我试图阻止FOR/F查询空格的内容.
for /F "tokens=* delims=," %%i in (C:\testlist.txt) DO call :test %%i
Run Code Online (Sandbox Code Playgroud)
这不会抛出任何错误消息,但仍会查询空白区域.
for /F %%i in (C:\testlist.txt ^| findstr /C:" " /v /r "^$" ) DO call :test %%i
Run Code Online (Sandbox Code Playgroud)
这会抛出错误消息" 系统找不到文件|. "并仍然查询空白区域.
此外,非常感谢有关如何改进我的代码的任何提示.
你没有空间问题.
在批处理文件中,当您使用子例程时,您将标签声明为起点,但没有任何东西阻止批处理文件执行到达标签后的代码.
一旦你的for命令结束处理文件,蝙蝠执行继续并且标签执行后的代码,但这次%1是空的(好或不,现在%1引用批处理文件的第一个参数),所以ping没有参数执行,显示它的帮助,因为它不包含Reply字符串(我无法测试,我有一个西班牙语语言环境),它作为一个不可访问的机器处理.
goto :eof在:test标签之前放置一个以避免执行以输入此代码,除非被调用.
@echo off
title Audit Script
for /F %%i in (C:\testlist.txt) DO call :test %%i
goto :eof <- This jumps to the end of the file
:test
....
....
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
44 次 |
| 最近记录: |