J'ai donc travaillé sur ce script batch pendant un moment maintenant, c'est le premier que j'ai jamais écrit. L'idée est de se connecter à des machines distantes dans notre domaine et de recueillir des informations.Pourquoi FOR/F prend-t-il un espace comme ligne valide lors de l'obtention de données d'un fichier et comment puis-je empêcher cela?
J'utilise un fichier .txt avec les adresses IP des machines, une par ligne et chacune séparée par une virgule comme ça.
192.168.1.1,
192.168.1.2,
192.168.1.3
Pour une raison quelconque, une fois le script atteint la dernière adresse IP dans le fichier, il interroge un espace vide. Cet espace vide est-il un caractère d'espace de fin? et comment puis-je empêcher cela? La façon dont j'ai actuellement la configuration du script signifie que lorsqu'un ordinateur est inaccessible, il renvoie un message au fichier journal. Donc, chaque fois que je lance le script, j'ajoute une ligne supplémentaire disant "(BLANK SPACE) La machine était inaccessible" Je sais que c'est seulement une petite chose mais ça m'embête.
Voici mon code
@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
Voici ce que j'ai essayé d'empêcher le FOR/F de l'interrogation d'un espace vide. Cela ne renvoie aucun message d'erreur mais il interroge toujours un espace vide.
for /F %%i in (C:\testlist.txt ^| findstr /C:" " /v /r "^$") DO call :test %%i
Cela jette le message d'erreur « Le système ne peut pas trouver le fichier |. » et aussi interroge encore l'espace vide.
En outre, tous les conseils sur la façon d'améliorer mon code seraient très appréciés.
Par défaut, 'FOR/F' ignore les lignes vides. Vous êtes sûr qu'il n'y a pas d'autre type de caractère de contrôle sur cette ligne? – Squashman
Je ne le savais pas. Il n'y a certainement pas de caractères supplémentaires autres que ceux indiqués ci-dessus. – ThisBritishGuy