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

Mitglied: pieh-ejdsch

pieh-ejdsch (Level 2) - Jetzt verbinden

09.05.2012, aktualisiert 18.08.2016, 7477 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
Windows 10

Windows 10: Ordnerschutz des Defender lässt sich leicht umgehen

Information von kgbornWindows 104 Kommentare

Windows 10 Fall Creators Update und der Ransomware-Ordnerschutz Microsoft hat bei Windows 10 Fall Creators Update (V1709) ja die ...

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 ...

Neue Wissensbeiträge
Multimedia & Zubehör
AVM Fritz USB WLAN Sticks schneller einschalten
Tipp von NetzwerkDude vor 19 StundenMultimedia & Zubehör

Die AVM Fritz WLAN Sticks haben in der Firmware 2 Modis: Einmal als Massenspeicher und einmal als WLAN Netzwerkkarte ...

Windows Server

Windows Server Backup schlögt Fehl -Lösung 2008-2016

Tipp von BiGnoob vor 21 StundenWindows Server

Hi zusammen , ich möchte gerne einen Lösungstipp abgeben für folgenden fehler: lösung ist folgende:

Humor (lol)
Telekom vs. O2 - 3:2
Erfahrungsbericht von the-buccaneer vor 1 TagHumor (lol)3 Kommentare

Unglaublich aber wahr: Nachdem mein privater Anschluss am 19.04.18 auf VOIP und VDSL umgestellt wurde, hatte ich seitdem 1,5 ...

Batch & Shell

Windows 10 Heimnetzgruppe abgeschaft. Ein Script für einfache Netzwerk - Freigabe im Heimnetzwerk

Anleitung von treehe vor 1 TagBatch & Shell3 Kommentare

Anleitung für eine einfache Netzwerkfreigabe unter Windows 10 Wie weiter hab mal ein kleines CMD - Script gebastelt. Womit ...

Heiß diskutierte Inhalte
Netzwerke
IP-Adresse am zweiten Domänencontroller fest vergeben - Server verschwunden
gelöst Frage von DanielG1974Netzwerke28 Kommentare

Ich hab ein Problem, was ich bisher noch nicht erlebt habe Ich habe erfolgreich einen zweiten Server mit ActiveDirectory ...

Windows Tools
Virtueller Drucker gesucht (Schnittstelle: USB oder Seriell)
Frage von chrisButterflyWindows Tools20 Kommentare

Hi, ich suche einen virtuellen Drucker, den ich über eine USB oder serieller Schnittstelle ansprechen kann. Dieser Drucker soll ...

Windows Server
Windows Server 2012 - Update - Beim Booten bleibt der Server beim Windows Zeichen stehen
Frage von KeilbachWindows Server17 Kommentare

Hallo Zusammen, ich grüße euch, mein Name ist Michele. Ich bin hier ganz Neu - da ich einfach nicht ...

Firewall
Sophos SG 125 nicht mehr erreichbar
Frage von GwaihirFirewall15 Kommentare

Hallo zusammen, ausgerechnet über die Feiertage stimmt etwas mit meiner Firmen-Firewall nicht. Es ist eine Sophos SG 125 und ...