Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Batchcode erstellen - Fehler im Batch leichter finden

Tipp Entwicklung Batch & Shell

Mitglied: pieh-ejdsch

pieh-ejdsch (Level 2) - Jetzt verbinden

09.05.2012, aktualisiert 18.08.2016, 7083 Aufrufe

Hallo Welt!

Beim schnellen Daher Schreiben von Batches kann es schonmal vorkommen, den ein oder anderen Fehler zu produzieren.
Mal wird eine Marke nicht gefunden oder eine Variable hat einen Vertipper.

Um diese Fehler leichter ausfindig zu machen, sind übersichtlich Angeordnete Informationen besser lesbar, als wenn diese über mehrere Zeilen verstreut sind.
Dieser Batch Listet solche wesentlichen Zeilen auf.
Er ersetzt aber nicht das Debugging von den Batches und macht auch darüber keine Syntaxprüfung.
Vielmehr soll es als Hilfe zur Fehlersuche angesehen werden.

Zum erstellen und ergänzen von größeren Batches ist es wärendessen eine Erleichterung.
01.
@setlocal 
02.
:checkEchoOn 
03.
@ :: Liest ob ECHO ON oder OFF geschalten ist um Variablen zu setzen 
04.
@( 
05.
echo>"%temp%\isOn.Ft" 
06.
for /f "usebackq tokens=2 delims=()" %%E in ("%temp%\isOn.FT") do @set "EchoBack=echo %%E &" 
07.
del "%temp%\isOn.Ft" 
08.
09.
 
10.
@echo off 
11.
setlocal disabledelayedexpansion 
12.
 
13.
:checkCMDline 
14.
:: setzt eine Variable CMDPause wenn im Batchmodus 
15.
@echo off 
16.
setlocal disabledelayedexpansion 
17.
 rem CMD-Kontex ? 
18.
set "CMDPause=%~f0" 
19.
set "CMDPause=%CMDPause:\=\\%" 
20.
set "CMDPause=%CMDPause:.=\.%" 
21.
setlocal enabledelayedexpansion 
22.
for /f delims^= %%i in ("!CMDcmdLine!") do endlocal &set "CMDPin=%%i" 
23.
cmd /von /c "echo !CMDPin!" |findstr /irc:"cmd .*\/c \"\"%CMDPause%\" .*\"" /c:"cmd\.exe .*\/c \"\"%CMDPause%\" .*\"" >nul 
24.
endlocal 
25.
if not errorlevel 1 set "CMDPause=pause &" 
26.
if     errorlevel 1 set "CMDPause=" 
27.
 
28.
 
29.
:: rem Testzeile aktivieren wenn Variable Debug gesetzt ? 
30.
if defined Debug echo on 
31.
 
32.
:checkEchoOn 
33.
@ :: Liest ob ECHO ON oder OFF geschalten ist um Variablen zu setzen 
34.
@( 
35.
rem ^%Mon% Zeilen bei Echo on auf REM umschalten 
36.
echo>"%temp%\isOn.Ft" 
37.
< "%temp%\isOn.Ft" find "ON" >nul && set "Mon=rem" || set "Mon=echo(" 
38.
del "%temp%\isOn.Ft" 
39.
40.
 
41.
::CheckCMD 
42.
if "%~1" neq "/?" goto :noHelp 
43.
echo Zum leichten Check von Batchcode. Listet gefundene Werte mit Zeilennummer auf. 
44.
echo(&<nul set /p ="%~n0 [Laufwerk:][Pfad]Dateiname  " 
45.
for /f "delims=: " %%i in ('findstr /irc:"^[ 	]*:[^:]* 	.* " "%~f0"') do ( 
46.
  %= Auflistung der Gefundenen Ergebnisse in einer Zeile =% 
47.
  <nul set /p "=[%%i] " 
48.
49.
echo(&echo( 
50.
echo 	Ohne Suchwert werden alle Werte aufgelistet. 
51.
echo(&echo 	Folgende Werte werden bei Angabe seperat aufgelistet. &echo(  
52.
for /f "tokens=*delims=:" %%i in ('findstr /irc:"^[ 	]*:[^:]* 	.* " "%~f0" ') do echo  %%i 
53.
echo( 
54.
%CMDPause%%EchoBack%exit /b 0 
55.
:noHelp 
56.
if not exist "%~1" echo Syntaxfehler. Datei nicht gefunden! 1>&2 &%CMDPause%%EchoBack%exit /b1 
57.
 
58.
 %mon% Ueberpruefe %1 
59.
echo( 
60.
:wieder 
61.
 rem Suche :Sprungmarke Leerzeichen TAB 
62.
findstr /i /r /c:"^ *:%~2 	*" "%~f0" >nul && (call :%~2 %1 %2 
63.
if "%~3" neq "" shift /2 & goto :wieder 
64.
%CMDPause%exit /b 0 
65.
) || if "%~2" neq "" (echo Keine Gueltige Abfrage: %2 
66.
if "%~3" neq "" shift /2 & goto :wieder 
67.
%CMDPause%exit /b 1 
68.
69.
 
70.
 
71.
 rem :Sprungmarke Leerzeichen TAB(TAB) Beschreibung 
72.
 
73.
:ECHO 		ECHO Zustand @/on/off Zeilen 
74.
 %Mon% ECHO  
75.
findstr /nvrc:"^[ 	]*:*:" %1 |findstr /irc:"[@]*[^a-Z]echo on[^a-Z]*" /c:"[@]*[^a-Z]*echo off[^a-Z]*" /c:"[^a-Z]*[@][a-Z(]" 
76.
if not errorlevel 1 echo(&echo( 
77.
if errorlevel 1 echo Keine ECHO/Silent Befehle gefunden!&echo( 
78.
if /i "%~0" equ ":ECHO" goto :eof 
79.
 
80.
:LOCAL 		setLOCAL en/disAble EXTensions/DELAYedExpansion ;EXIT 
81.
%Mon% LOCAL 
82.
findstr  /nirc:"[^a-Z]*setlocal\>" /C:"[^a-Z]*endlocal\>"^ 
83.
 /c:"[^a-Z]*setlocal EnableDelayedExpansion\>" /c:"[^a-Z]*setlocal DisableDelayedExpansion\>" ^ 
84.
 /c:"[^a-Z]*setlocal EnableExtensions\>" /c:"[^a-Z]*exit[ ]*\/b" ^ 
85.
 %1 
86.
if not errorlevel 1 echo(&echo( 
87.
if     errorlevel 1 echo Keine Local/exit gefunden!&&echo( 
88.
if /i "%~0" equ ":%2" goto :eof 
89.
 
90.
:CALL 		Sprunganfang Positionen Unteroutinen 
91.
 %Mon% CALL 
92.
 rem :::: Notiz: Findstr regulaer: Zeilenanfang und Wortanfang nicht gleichzeitig nehmen 
93.
findstr  /nirc:"^[^:].*[(&|]*[^:][ 	]*call\>" /c:"^call\>" %1 &&echo(&&echo(||echo Keinen CALL Sprunganfang gefunden!&&echo( 
94.
if /i "%~0" equ ":%2" goto :eof 
95.
 
96.
:GOTO 		Sprunganfang Positionen Fortsetzung ab :Marke 
97.
 %Mon% GOTO  
98.
 rem :::: Notiz: GOTO[;:= 	][;:= 	]*.* 
99.
findstr /nvrc:"^[ 	]*:" %1 |findstr /irc:"[^a-Z]*goto\>" &&echo(&&echo(||echo Keinen GOTO Sprunganfang gefunden!&&echo( 
100.
if /i "%~0" equ ":GOTO" goto :eof 
101.
 
102.
:MARKE 		SprungMarke 
103.
 %Mon% :MARKE 
104.
findstr /nirc:"^[;= 	]*:[^:#].*" %1 &&echo(&&echo(||echo Keine :MARKE Sprungposition gefunden!&&echo( 
105.
if "%~2" neq "" goto :eof 
106.
 
107.
:PARENTH 	Klammern ( ) 
108.
%Mon% PARENTH 
109.
findstr /nirc:"^[;= 	]*[^:#][^:]*.*[^a-Z][()]" /c:"^[;= 	@]*[()]" %1 
110.
if not errorlevel 1 echo(&echo( 
111.
if errorlevel 1 echo keine Klammern gefunden!&echo( 
112.
if /i "%~2" neq "" goto :eof 
113.
 
114.
:PIPE 		Eingabe Zeilen 
115.
 %Mon% PIPE  
116.
findstr /nirc:"^[;= 	]*[^:#].*[^|]|[^|].*" /c:"^[;= 	]*[^:#].*[^^][^|]^|[^^][^|].*" %1 
117.
if not errorlevel 1 echo(&echo( 
118.
if errorlevel 1 echo Keine Eingabe gefunden!&echo( 
119.
if /i "%~0" equ ":ECHO" goto :eof 
120.
 
121.
:REDIRECT 	Handle Umleitung 
122.
 %Mon% REDIRECT  
123.
findstr /nivrc:"^[,;= 	]*:" /c:"^[,;= 	]*rem" %1 |findstr /irc:"[<>]&[1-9]" /c:"[1-9]>" /c:"[<>]." ^ 
124.
 /c:"^[<>]^&[1-9]" /c:"[1-9]^>^>" /c:"[1-9]^>" /c:"^>." 
125.
if not errorlevel 1 echo(&echo( 
126.
if errorlevel 1 echo Keine Handle Umleitung gefunden!&echo( 
127.
if /i "%~0" equ ":REDIRECT" goto :eof 
128.
 
129.
:COMMENT 	Kommentarzeilen mit :: 
130.
 %Mon% :: KOMMENTAR 
131.
findstr /nirc:"^[,;= 	]*::" %1 &&echo(&&echo( 
132.
if errorlevel 1 echo Keine Kommentarzeile :: gefunden!&echo( 
133.
if "%~2" neq "" goto :eof 
134.
 
135.
:REM 		Kommentarzeilen mit REM 
136.
 %Mon% REM 
137.
findstr /nirc:"^[ 	,;=]*rem\>" %1 &&echo(&&echo( 
138.
if errorlevel 1 echo Keine REM Kommentar gefunden!&echo( 
139.
if "%~2" neq "" goto :eof 
140.
 
141.
:LoopCOMMENT 	Kommentare in Schleifen %= Loop Comment % werden aufgelistet 
142.
 %Mon% %%= LOOPCOMMENT =%% 
143.
findstr /nirc:"^[ 	,;=]*[^%%a-Z]%%==*[a-Z]*.*%%" %1 &&echo(&&echo( 
144.
if errorlevel 1 echo Kein %%= Loop Kommentar %% gefunden!&echo( 
145.
if "%~2" neq "" exit /b 
146.
 
147.
:OneLINE 	Einanderfolgende Zeilen (ohne Zeilenumbruch) 
148.
 %Mon% OneLine^^ 
149.
findstr /nirc:".*\^$" %1 &&echo(&&echo( 
150.
if errorlevel 1 echo Kein OneLine gefunden!&echo( 
151.
if "%~2" neq "" exit /b 
152.
 
153.
:SET 		Variablen werden Definiert 
154.
 %Mon% SET 
155.
findstr /nvrc:"^[ 	]*:*:" %1 |findstr /irc:"[^a-Z]set[^a-Z]" &&echo(&&echo(||echo Keine SET Anweisung gefunden!&&echo( 
156.
if "%~2" neq "" goto :eof 
157.
 
158.
:VARS 		Variablennamen werden aufgelistet 
159.
 %Mon% %%VARIABLEN%% 
160.
findstr /nvrc:"^[ 	]*:" /c:"%%.*:~%%" %1 |findstr /irc:"%%[a-Z§$.\_+#?-][^0-9~=%% ]*[a-Z§$./_+'?-]*%%"^ 
161.
 /c:"%%[a-Z§$.\_+#?-][^0-9~=%% ]*[a-Z]*:[ ~0-9].*%%" /c:"%%[a-Z§$.\_+#?-][^0-9~=%% ]*[a-Z]*:[a-Z§$._+'?-].*%%" &&echo(&&echo(||echo Keine %%Variable%% gefunden!&&echo( 
162.
 
163.
 %Mon% !VARIABLEN! 
164.
findstr /nvrc:"^[ 	]*::" %1 |findstr /irc:"[^^]![a-Z§$._+#?\-][a-Z§$._+#?\-]*[^0-9~= ]*.*[^^]!" &&echo(&&echo(||echo Keine !Variable! gefunden!&&echo( 
165.
if "%~2" neq "" goto :eof 
166.
 
167.
:ForVARS 	Auflistung von For Schleifen Variablen  
168.
 %Mon% FOR VARIABLEN 
169.
findstr /nirc:"^[ ]*[^:].*[^a-Z]%%%%~*[dpnxf]*[?#@a-Z][^0-9]*[^a-Z]*" %1 &&echo(&&echo(||echo Keine FOR -Variable gefunden!&&echo( 
170.
if "%~2" neq "" goto :eof 
171.
 
172.
:PARAM 		die Verwendung von Parametern 
173.
 %Mon% PARAMETER 
174.
findstr /nirc:"^[ 	]*[^:].*[^a-Z]%%~*[dpnxf]*[0-9\*][^a-Z]*" %1 &&echo(&&echo(||echo Kein Parmeter gefunden!&&echo( 
175.
if "%~2" neq "" goto :eof 
176.
 
177.
:NoCOMMENT 	der Batch ohne Kommentarzeilen mit :: rem %%= 
178.
 %Mon% KEIN :: rem KOMMENTAR ^(Script ohne Kommentar^) 
179.
findstr /nvrc:"^[,;= 	]*::" /c:"^[ 	,;=]*rem\>" /c:"^[ 	,;=]*[^%%a-Z]%%==*[a-Z]*.*%%" %1 &&echo(&&echo( 
180.
if "%~2" neq "" goto :eof 
181.
 
182.
 
183.
::Weitere Pruefungen ... 
184.
 rem :Sprungmarke Leerzeichen TAB(TAB) Beschreibung 
185.
 
186.
%CMDPause%rem Scriptende
[Edit]
Filter erweitert
[/Edit]

Es lassen sich leicht Ergänzende Suchbegriffe am Ende einfügen.

In einen älteren Beitrag hier ist eine Überprüfung von echo Zeilen auf nichtmaskierte Sonderzeichen.

Viel Erfolg bei der Fehlersuche und beim erstellen.

Gruß Phil
Neuester Wissensbeitrag
Festplatten, SSD, Raid

12TB written pro SSD in 2 Jahren mit RAID5 auf Hyper-VServer

Erfahrungsbericht von Lochkartenstanzer zum Thema Festplatten, SSD, Raid ...

Ähnliche Inhalte
Batch & Shell
Batch: .rar-Pakete automatisch Ordner erstellen und verschieben (2)

Frage von BowserMD zum Thema Batch & Shell ...

Batch & Shell
gelöst Splitten in Batch. Wo liegt der Fehler!? (4)

Frage von Todybear zum Thema Batch & Shell ...

Batch & Shell
"Generic" Drucker mit batch - File erstellen (6)

Frage von MrPreesident zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (34)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...