使用批处理文件检查域PC中是否存在文件时,进程挂起



批次文件出现以下问题。。。

问题:我创建了一个批处理脚本来检查文件夹位置中是否存在文件,如果存在文件,它会将PC名称(标记为资产)写入日志文件。然而,在扫描了99台电脑后,它会挂起大约20秒,然后再扫描几台并挂起。我需要想办法让这场比赛顺利进行。

性能表明处理器确实会出现峰值。我尝试过从另一个优先级较低的批处理文件调用它,但结果相同。

所有电脑都命名为"ABC",后面跟着4个数字。

下面是完整的代码,因为我不知道重点应该在哪里。如果有更合适的编辑,我很乐意。

cls
@echo off
echo Set range of asset tags to scan:
:min
echo:
set /p min="Enter lowest asset number to scan (number only): "
if not defined min goto :min
if %min% lss 1000 (
msg * Asset must be 4 digits
goto :min
)
if %min% gtr 5000 (
msg * Min asset out of range
goto :min
)
:max
echo:
set /p max="Enter highest asset number to scan (number only): "
if not defined max goto :max
if %max% gtr 5000 (
msg * Max asset out of range
goto :max
)
if %max% lss %min% (
msg * Max cannot be lower than min
goto :max
)
set /a max=%max%+1
@echo off
REM Count Logic
set count=%min%
REM sets date/time log stamp to consistent value. If done per line, the         seconds change will create multiple files.
set name=Scan_Results_%DATE:~-4%%DATE:~4,2%%DATE:~7,2%%TIME:~0,2%%TIME:~3,2%%TIME:~6 ,2%%TIME:~10,2%
REM creates a date and time stamped log file from location batch file is run
echo Dictation Scan from %Date% %Time% > %name%.txt
@echo off

:loop
@echo off
set /a count=%count%
echo Asset tag being scanned: %count%
@echo off
REM "ABC" to count as string to inject in filepath
set asset=abc%count%
ping -n 1 %asset%.domain.com > NUL
IF ERRORLEVEL 0 (goto :scan) ELSE goto :No
:scan
REM IF LOGIC (If files are detected DO X or else Y [loop until end])
@echo off
for /F %%i in ('dir /b "\%asset%.domain.comC$Program FilesSpeech     MachinesSubSpacetemp*.*"') do (
goto :Yes
)
goto :No
:Yes
echo writing asset to log file
echo %asset% >> %name%.txt
set /a count=%count%+1
goto :iteration
:No
set /a count=%count%+1
goto :iteration
:iteration
REM This is the highest asset tag number that you want to scan
if not #%count%#==#%max%# goto loop
goto final
:final
echo %found% >> %name%.txt
@echo SCANNING COMPLETE.
Pause
exit

中的逻辑

ping -n 1 %asset%.domain.com > NUL
IF ERRORLEVEL 0 (goto :scan) ELSE goto :No

无法检测到脱机计算机。对于等于或大于n的任何错误级别值,if errorlevel n构造都将被评估为true,因此,对于任何非负错误级别,if errorlevel 0都将为true。

你可以尝试使用任何

ping -n 1 %asset%.domain.com > NUL
if errorlevel 1 ( goto :no ) else ( goto :scan )
ping -n 1 %asset%.domain.com > NUL
if not errorlevel 1 ( goto :scan ) else ( goto :no )
ping -n 1 %asset%.domain.com > NUL && goto :scan || goto :no
ping -n 1 %asset%.domain.com > NUL
if %errorlevel% equ 0 ( goto :scan ) else ( goto :no )

但是,根据源机器和目标机器的ip版本和子网,测试ping错误级别不是测试目标机器是否在线的安全方法(请阅读此处)

最新更新