Top-Themen

Aktuelle Themen (A bis Z)

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, 7332 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
Ähnliche Inhalte
Verschlüsselung & Zertifikate
USB-Stick-Verschlüsselung im Unternehmen - leicht gemacht
Tipp von DerWoWussteVerschlüsselung & Zertifikate24 Kommentare

Mir ist vor kurzem aufgefallen, dass Bitlocker in Win8/Server 2012- (oder höher) Umgebungen ein sehr praktisches Feature hat, das ...

Erkennung und -Abwehr
Malware auf Linuxserver finden :-)
Tipp von LochkartenstanzerErkennung und -Abwehr10 Kommentare

Geht ganz einfach mit und Genauer gesagt: Momentan sind große Botnetze mit linux-Servern aktiv. Siehe golem und heise. Wer ...

Windows Netzwerk
Heimnetzgruppe erstellen und Probleme mit VMWare
Erfahrungsbericht von hanni007Windows Netzwerk

Hallo liebe Community, seit einigen Tagen saß ich nun an einem Problem und wusste auf Teufel komm raus nicht ...

Humor (lol)
Wo ist der Fehler auf dem Bild?
Information von the-buccaneerHumor (lol)17 Kommentare

und was wird denn beim klicken nun behoben? nichts! meldung bleibt so. nachdem ein anderer client nach einem produktupdate ...

Neue Wissensbeiträge
DSL, VDSL

ALL-BM200VDSL2V - Neues VDSL-Modem mit Vectoring von Allnet

Information von Lochkartenstanzer vor 52 MinutenDSL, VDSL

Moin, Falls jemand eine Alternative zu dem draytek sucht: Gruß lks

Windows 10

Microsoft bestätigt DMA-Policy-Problem in Win10 v1709

Information von DerWoWusste vor 1 StundeWindows 10

Wer sein Gerät mit der DMA-Policy absichert, bekommt evtl. Hardwareprobleme in v1709 von Win10. Warum? Weil v1709 endlich "richtig" ...

Verschlüsselung & Zertifikate

Die Hölle friert ein weiteres Stück zu: Microsoft integriert OpenSSH in Windows

Information von ticuta1 vor 4 StundenVerschlüsselung & Zertifikate

Interessant Die Hölle friert ein weiteres Stück zu: Microsoft integriert OpenSSH in Windows SSH-Kommando in CMD.exe und PowerShell

Apple

IOS 11.2.1 stopft HomeKit-Remote-Lücke

Tipp von BassFishFox vor 1 TagApple

Das Update für iPhone, iPad und Apple TV soll die Fernsteuerung von Smart-Home-Geräten wieder in vollem Umfang ermöglichen. Apple ...

Heiß diskutierte Inhalte
Windows Server
RODC kann nicht aus Domäne entfernt werden
Frage von NilsvLehnWindows Server19 Kommentare

HAllo, ich arbeite in einem Universitätsnetzwerk mit 3 Standorten. Die Standorte haben alle ein ESXi Cluster und auf diesen ...

Hardware
Kein Bild mit nur einer bestimmten Grafikkarten - Mainboard Konfiguration
gelöst Frage von bestelittHardware18 Kommentare

Hallo zusammen, ich hatte schon einmal eine ähnliche Frage gestellt. Damals hatte ich genau das gleiche Problem. Allerdings lies ...

Netzwerkmanagement
Mehrere Netzwerkadapter in einem PC zu einem Switch zusammenfügen
Frage von prodriveNetzwerkmanagement17 Kommentare

Hallo zusammen Vorweg, ich konnte schon einige IT-Probleme mit Hilfe dieses Forums lösen. Wirklich klasse hier! Doch für das ...

Hardware
Links klick bei Maus funktioniert nicht
gelöst Frage von Pablu23Hardware16 Kommentare

Hallo erstmal. Ich habe ein Problem mit meiner relativ alten maus jedoch denke ich nicht das es an der ...