Post your batch file creations here!
Posted: 20 May 2011 10:47
just like the title says, Post your cmd creations down here!
A Forum all about DOS Batch
https://www.dostips.com/forum/
Code: Select all
@echo off
set NLM=^
set NL=^^^%NLM%%NLM%^%NLM%%NLM%
echo ^<head^>^<hta:application scroll="no" maximizebutton="no" border="thin" ^>^<title^>Window-to-Prompt Information Transfer^</title^>^<br^>^<Br^>^<br^>^<br^>^<script type="text/vbscript"^>%NL%function transfer()%NL%set file = fileCommand.createtextfile("info.txt")%NL%file.write(textbox.value)%NL%file.close()%NL%end function%NL%^</script^>^<style type="text/css"^>body{background-color:C8C8C8;}^</style^>^</head^>^<body^>^<center^>^<textarea style="height:100;width:300;" id="textbox"^>^</textarea^>^<br^>^<button onclick="transfer()" ^>Click to transfer data^</button^>^<script type="text/vbscript"^>x = window.resizeTo(344,190)%NL%set fileCommand = createobject("scripting.filesystemobject")%NL%^</script^>^</body^> > window234234.hta
echo set wshell = createobject("wscript.shell")%NL%do%NL%set wim = getobject("winmgmts:")%NL%if wim.execquery("select * from Win32_Process where name = 'cmd.exe'").Count ^> 0 then%NL%else%NL%f = wshell.run("taskkill /f /im mshta.exe",0)%NL%f = wshell.run("taskkill /f /im wscript.exe",0)%NL%end if%NL%loop > checker1.vbs
echo set wshell = createobject("wscript.shell")%NL%do%NL%set wim = getobject("winmgmts:")%NL%if wim.execquery("select * from Win32_Process where name = 'mshta.exe'").Count ^> 0 then%NL%else%NL%f = wshell.run("taskkill /f /im cmd.exe",0)%NL%f = wshell.run("taskkill /f /im wscript.exe",0)%NL%end if%NL%loop > checker2.vbs
start window234234.hta
ping 0 -n 1 > nul
start checker1.vbs
start checker2.vbs
ping 0 -n 2 > nul
del checker1.vbs
del checker2.vbs
del window234234.hta
:loop
if exist info.txt (
findstr /v "asdfasdfasdf" info.txt
echo.
del info.txt
goto loop
) else (
goto loop
)
del window234234.hta
Code: Select all
@setlocal
@call :SetEchoBack
@echo OFF
setlocal disabledelayedexpansion
:: rem Testzeile aktivieren wenn Variable Debug gesetzt ?
if defined Debug echo on
call :checkcmdLine "%%~f0"
call :Debugsettings :checkEchoON :macro_checkParenthesis
@rem begin script
rem Section extra to debug this script
if :SUB==debug (
rem < debugsettings
:DebugSettings
rem = :DebugSettings
rem echo .%1. .%2. .%3. .%4.
rem useful for script debugging
@for %%D in (%* )do call %%~D
rem > END DebugSettings
@exit /b
rem < :SetEchoBack
:SetEchoBack
:: Liest ob ECHO ON oder OFF geschalten ist um Variablen zu setzen
:: VAR EchoBack = read and set ECHO ON / OFF
::
@rem ^= :setechoBack
@(
echo>"%temp%\isOn.Ft"
for /f "usebackq tokens=2 delims=()" %%E in ("%temp%\isOn.FT"
)do @set "EchoBack=echo %%E &"
del "%temp%\isOn.Ft"
set prompt=$G$S
)
:
@rem ^> END SetEchoBack
@if /i "%~0" equ ":SetEchoBack" exit /b
@rem Testline2
rem < :checkcmdline
:checkCMDline [parenthBatch Fullname]
:: setzt eine Variable CMDPause wenn im Batchmodus
:: VAR CMDPause = read CMD-Kontex ;set pause
:: When called from the parent batch program, the Fullname must be passed as a parameter
@rem = :checkCmdLine
@(
setlocal disabledelayedexpansion
rem CMD-Kontex ?
set "CMDPause=%~f0"
if /i "%~0" equ ":checkCMDline" set "CMDPause=%~f1"
)
@set "CMDPause=%CMDPause:\=\\%"
@(
set "CMDPause=%CMDPause:.=\.%"
setlocal enabledelayedexpansion
for /f delims^= %%i in ("!CMDcmdLine!") do @endlocal &set "CMDPin=%%i"
)
@cmd /von /c "echo !CMDPin!" |findstr /irc:"cmd .*\/c \"\"%CMDPause%\" .*\"" /c:"cmd\.exe .*\/c \"\"%CMDPause%\" .*\"" >nul
@(
endlocal
if not errorlevel 1 set "CMDPause=pause &"
if errorlevel 1 set "CMDPause="
exit /b
)
rem > END checkcmdLine
rem Testzeile aktivieren wenn Variable Debug gesetzt ?
@if defined Debug echo on
rem < :checkEchoOn
:checkEchoOn
:: Liest ob ECHO ON oder OFF geschalten ist um Variablen zu setzen
:: VAR Mon = read ECHO ON / OFF ;set Echo( / rem
rem = :checkEchoOn
@(
rem ^%Mon% Zeilen bei Echo on auf REM umschalten
echo>"%temp%\isOn.Ft"
< "%temp%\isOn.Ft" find "ON" >nul
if not errorlevel 1 set "Mon=rem"
if errorlevel 1 set "Mon=echo("
del "%temp%\isOn.Ft"
rem > END checkEchoOn
if /i "%~0" equ ":CheckEchoOn" exit /b
)
rem < :macro_checkParenthesis
= :macro_checkParenthesis
:: FIRST DEFINE THE MACRO with Tempfile
%== VAR # = Number of Failed ==%
%== VAR ) = macro for Check ==%
rem = :macro_checkParenthesis
@for %%A in ("%temp%\Pfile.cmd") do @(
(
echo ^@(set LF=^^
echo(
echo(^)
echo @set ^^^"\n=^^^^^^%%LF%%%%LF%%^^%%LF%%%%LF%%^^^^"
echo @set ^^^)=@^(@%%\n%%
for /l %%i in (0 1 50) do @echo(^)^^^&^^^>nul set/a#=%%i%%\n%%
echo(^)
) >%%A
call %%A
del %%A
exit /b
)
rem > END :macro_checkParenthesis
rem v --- next Lines will show all are missing ) ----
%)%
@if :%#% leq :0 for %%. in (.)do rem ^ --- before Lines will show all missing ) . ----
@if :%#% gtr :0 echo --- %#% ^) missing
rem Section extra to debug this script END
:: begin Main
::CheckCMD
if "%~1" neq "/?" goto :noHelp
echo Zum leichten Check von Batchcode. Listet gefundene Werte mit Zeilennummer auf.
echo(&<nul set /p ="%~n0 [Laufwerk:][Pfad]Dateiname "
for /f "delims=: " %%i in ('findstr /irc:"^[ ]*:[^:]* .* " "%~f0"') do (
%= Auflistung der Gefundenen Ergebnisse in einer Zeile =%
<nul set /p "=[%%i] "
)
echo(&echo(
echo Ohne Suchwert werden alle Werte aufgelistet.
echo(&echo Folgende Werte werden bei Angabe seperat aufgelistet. &echo(
for /f "tokens=*delims=:" %%i in ('findstr /irc:"^[ ]*:[^:]* .* " "%~f0" ') do echo %%i
echo(
%CMDPause%%EchoBack%exit /b 0
:noHelp
if not exist "%~1" echo Syntaxfehler. Datei nicht gefunden! 1>&2 &%CMDPause%%EchoBack%exit /b1
set IF=if errorlevel 1 (type nul)else echo
%mon% Ueberpruefe %1
echo(
:wieder
rem Suche :Sprungmarke Leerzeichen TAB
findstr /i /r /c:"^ *:%~2 *" "%~f0" >nul && (
call :%~2 %1 %2
if "%~3" neq "" shift /2 & goto :wieder
%CMDPause%%EchoBack%exit /b 0
) || if "%~2" neq "" (
echo Keine Gueltige Abfrage: %2
if "%~3" neq "" shift /2 & goto :wieder
%CMDPause%%EchoBack%exit /b 1
)
rem *** Notiz *** Verkettung von Befehlen: EIN & am Zeilenende wird ignoriert
rem *** Notiz *** bei ECHO ON: Befehle welche um ein Leerzeichen eingerückt sind
rem sind innnerhalb einer Klammer und entsprechen einer Zeile
rem :Sprungmarke Leerzeichen TAB(TAB) Beschreibung
:ECHO ECHO Zustand @/on/off Zeilen
%Mon% ECHO
findstr /nvrc:"^[ ]*:*:" %1 |findstr /irc:"[@]*[^a-Z]echo on\>" /c:"[@]*[^a-Z]*echo off[^a-Z]*"
if not errorlevel 1 type nul
if errorlevel 1 echo Keine ECHO/Silent Befehle gefunden!
echo(
if /i "%~0" equ ":ECHO" goto :eof
:@ Befehle Stummschalten @ Zeilen
@rem don't Show commands
rem if /i "%~0" equ ":@" (
%Mon% @
findstr /nvrc:"^[ ]*:*:" %1 |findstr /irc:"[^a-Z]*[@][a-Z(]"
if not errorlevel 1 echo(
if errorlevel 1 echo Keine Silent Befehle gefunden!
echo(
if /i "%~0" equ ":@" goto :eof
)
:LOCAL setLOCAL en/disAble EXTensions/DELAYedExpansion ;EXIT
%Mon% LOCAL
rem *** Notitz * Findstr: wortEnde \> und folgende Sonderzeichen in
rem einer ZeichenKlasse NICHT gleichzeitig nehmen
rem NICHT - /C:"[^a-Z]*setlocal[ ]*[^a-Z]"^
rem ersatz -
findstr /nir^
/C:"[^a-Z]*setlocal[ ]*$"^
/C:"[^a-Z]*setlocal[ ]*&"^
/C:"[^a-Z]*endlocal\>"^
/c:"[^a-Z]*setlocal EnableDelayedExpansion\>"^
/c:"[^a-Z]*setlocal DisableDelayedExpansion\>" ^
/c:"[^a-Z]*setlocal EnableExtensions\>"^
/c:"[^a-Z]*setlocal DisableExtensions\>" /c:"[^a-Z]*exit[ ]*\/b" ^
/c:"[^a-Z]*GOTO[;:= ][;:= ]*eof\>" ^
%1
if not errorlevel 1 echo(
if errorlevel 1 echo Keine Local/exit gefunden!
echo(
if /i "%~0" equ ":%2" goto :eof
:CALL Sprunganfang Positionen Unteroutinen
%Mon% CALL
rem *** Notiz *** Findstr regulaer: Zeilenanfang und Wortanfang nicht gleichzeitig nehmen
findstr /nirc:"^[^:].*[(&|]*[^:][ ]*call\>" /c:"^call\>" %1
if not errorlevel 1 echo(
if errorlevel 1 echo Keinen CALL Sprunganfang gefunden!
echo(
if /i "%~0" equ ":%2" goto :eof
:GOTO Sprunganfang Positionen Fortsetzung ab :Marke
%Mon% GOTO
rem *** Notiz * GOTO[;:= ][;:= ]*.*
findstr /nvrc:"^[ ]*:" %1 |findstr /irc:"[^a-Z]*goto\>"
if not errorlevel 1 echo(
if errorlevel 1 echo Keinen GOTO Sprunganfang gefunden!
echo(
if /i "%~0" equ ":GOTO" goto :eof
:MARKE SprungMarke
%Mon% :MARKE
rem *** Notiz *** Betrifft innerhalb einer Klammer: wird auf der
rem folgenden Zeile eine Marke Gefunden, muss in der neuen FolgeZeile
rem mit einem blinden Befehl abgeschlossen werden.
rem Doppelpunk oder rem oder @.
rem Die Abschlusszeile wird bei ECHO ON auch bei @ Angezeigt.
rem - eine Abschliesende :Kommentarzeile bleibt als leere Zeile stehen.
rem Eine Klammer benötigt mindestens einen Befehl.
findstr /nirc:"^[;= ]*:[^:#].*" %1
if not errorlevel 1 echo(
if errorlevel 1 echo Keine :MARKE Sprungposition gefunden!
echo(
if "%~2" neq "" goto :eof
:PARENTH Klammern ( )
%Mon% PARENTH
rem *** Notiz ***
rem Eine Klammer benötigt mindestens einen Befehl.
rem bei ) wenn Klammerlevel 0: : !! KEINE Multiline möglich.
rem schliesende Klammern werden wie REM behandelt.
rem Variablen werden behandelt. Sonderzeichen sind immer Normal -> Maskierter Bereich.
rem Die Zeile wird jedoch NICHT angezeigt. -> stumme KommentarZeile.
findstr /nirc:"^[;= ]*[^:#][^:]*.*[^a-Z][()]" /c:"^[;= @]*[()]" %1
if not errorlevel 1 echo(
if errorlevel 1 echo keine Klammern gefunden!
echo(
if /i "%~2" neq "" goto :eof
:PIPE Eingabe Zeilen
%Mon% PIPE
findstr /nirc:"^[;= ]*[^:#].*[^|]|[^|].*" /c:"^[;= ]*[^:#].*[^^][^|]^|[^^][^|].*" %1
if not errorlevel 1 echo(
if errorlevel 1 echo Keine Eingabe gefunden!
echo(
if /i "%~0" equ ":PIPE" goto :eof
:REDIRECT Handle Umleitung
rem if /i "%~0" equ ":REDIRECT" (
%Mon% REDIRECT
findstr /nivrc:"^[,;= ]*:" /c:"^[,;= ]*rem" %1 |findstr /irc:"[<>]&[1-9]" /c:"[1-9]>" /c:"[<>]." ^
/c:"^[<>]^&[1-9]" /c:"[1-9]^>^>" /c:"[1-9]^>" /c:"^>."
if not errorlevel 1 echo(
if errorlevel 1 echo Keine Handle Umleitung gefunden!
echo(
if /i "%~0" equ ":REDIRECT" goto :eof
)
:COMMENT Kommentarzeilen mit ::
rem if /i "%~0" equ ":COMMENT" (
%Mon% :: KOMMENTAR
rem *** Notitz *** werden wie normale Zeilen behandelt.
rem bleiben stumm.
rem siehe auch: MARKE
findstr /nirc:"^[,;= ]*::" %1
if not errorlevel 1 echo(
if errorlevel 1 echo Keine Kommentarzeile :: gefunden!
echo(
if /i "%~0" equ ":COMMENT" goto :eof
)
:REM Kommentarzeilen mit REM
%Mon% REM
rem *** Notiz *** bei REM: wird vollständig laut Parsing eingelesen.
rem Variablen werden behandelt. Sonderzeichen sind immer Normal -> Maskierter Bereich.
rem Die Zeile wird bis zum Zeilenende nur bei Echo ON ausgegeben.
findstr /nirc:"^[ ,;=]*rem\>" %1
if not errorlevel 1 echo(
if errorlevel 1 echo Kein REM Kommentar gefunden!
echo(
if "%~2" neq "" goto :eof
:LoopCOMMENT Kommentare in Schleifen %= Loop Comment % werden aufgelistet
%Mon% %%= LOOPCOMMENT =%%
findstr /nirc:"^[ ,;=]*[^%%a-Z]%%==*[a-Z]*.*%%" %1
if not errorlevel 1 echo(
if errorlevel 1 echo Kein %%= Loop Kommentar %% gefunden!
echo(
if "%~2" neq "" exit /b
:OneLINE Einanderfolgende Zeilen (ohne Zeilenumbruch)
%Mon% OneLine^^
rem *** Notiz *** bei REM UND bei ) wenn Klammerlevel 0: !! KEINE Multiline möglich.
rem *** Notiz *** bei Klammerlevel 0: schliesende Klammern werden wie REM behandelt.
rem Die Zeile wird jedoch nicht angezeigt. -> stumme KommentarZeile.
rem *** Notiz *** bei REM: wird vollständig laut Parsing eingelesen.
rem Variablen werden behandelt. Sonderzeichen bleiben Normal -> Maskierter Bereich
rem Die Zeile wird bis zum Zeilenende nur bei Echo ON ausgegeben.
findstr /nirc:".*\^$" %1
if not errorlevel 1 echo(
if errorlevel 1 echo Kein OneLine gefunden!
echo(
if "%~2" neq "" exit /b
:SET Variablen werden Definiert
%Mon% SET
findstr /nvrc:"^[ ]*:*:" %1 |findstr /irc:"[^a-Z]set[^a-Z]"
if not errorlevel 1 echo(
if errorlevel 1 Keine SET Anweisung gefunden!&&type nul
echo(
if "%~2" neq "" goto :eof
:VARS Variablennamen werden aufgelistet
%Mon% %%VARIABLEN%%
findstr /nvrc:"^[ ]*:" /c:"%%.*:~%%" %1 |findstr /irc:"%%[a-Z§$.\_+#?-][^0-9~=%% ]*[a-Z§$./_+'?-]*%%"^
/c:"%%[a-Z§$.\_+#?-][^0-9~=%% ]*[a-Z]*:[ ~0-9].*%%" /c:"%%[a-Z§$.\_+#?-][^0-9~=%% ]*[a-Z]*:[a-Z§$._+'?-].*%%"
if not errorlevel 1 echo(
if errorlevel 1 echo Keine %%Variable%% gefunden!
echo(
%Mon% !VARIABLEN!
findstr /nvrc:"^[ ]*::" %1 |findstr /irc:"[^^]![a-Z§$._+#?\-][a-Z§$._+#?\-]*[^0-9~= ]*.*[^^]!"^
/c:"[^^]![a-Z§$._+#?\-]*!"
if not errorlevel 1 echo(
if errorlevel 1 echo Keine !Variable! gefunden!
echo(
if "%~2" neq "" goto :eof
:ForVARS Auflistung von For Schleifen Variablen
%Mon% FOR VARIABLEN
findstr /nirc:"^[ ]*[^:].*[^a-Z]%%%%~*[dpnxf]*[?#@a-Z][^0-9]*[^a-Z]*" %1
if not errorlevel 1 echo(
if errorlevel 1 echo Keine FOR -Variable gefunden!
echo(
if "%~2" neq "" goto :eof
:PARAM die Verwendung von Parametern
%Mon% PARAMETER
findstr /nirc:"^[ ]*[^:].*[^a-Z]%%~*[dpnxf]*[0-9\*][^a-Z]*" %1
if not errorlevel 1 echo(
if errorlevel 1 echo Kein Parmeter gefunden!
echo(
if "%~2" neq "" goto :eof
:NoCOMMENT der Batch ohne Kommentarzeilen mit :: rem %= InLoop %
rem wird nur aufgelistet bei direkter Angabe
if /i "%~0" equ ":NoCOMMENT" (
%Mon% KEIN :: rem KOMMENTAR ^(Script ohne Kommentar^)
findstr /nvrc:"^[,;= ]*::" /c:"^[ ,;=]*rem\>" /c:"^[ ,;=]*[^%%a-Z]%%==*[a-Z]*.*%%" %1
if not errorlevel 1 echo(
echo(
goto :eof
)
:ERROR Eventuelle Fehlerzeile
%Mon% ERROR
findstr /nirc:"^[ ]*[^:].*[^a-Z]*[^%%]%%~*[dpnxf]*[?#@a-Z][ ]" %1
if not errorlevel 1 echo(
if errorlevel 1 echo Keine FOR -Errors gefunden!
echo(
if "%~2" neq "" goto :eof
:Level Klammern ( )
%Mon% Level
rem *** Notiz *** Klammern werden bei rem Kommentaren bis zum Zeilenende ignoriert
setlocal
rem 1. token i = Offset Zeichen
rem 2. Token j = Fundstelle Nr.
set /a Level=0
rem .. set "Blockline="
set "TempF=%temp%\checkfile.tmp"
for /f delims^= %%I in ('findstr /nirc:"^[;= ]*[^:#][^:]*.*[^a-Z][()]" /c:"^[;= @]*[()]" %1') do (
set "Line=%%I"
echo %%I
setlocal enabledelayedexpansion
>"%tempF%" echo(!Line:*:=!
for /f "delims=:" %%N in ("!Line!") do (
endlocal
set "in="
set "out="
set "L="
for /f "tokens=1-3 delims=[]:" %%i in (' cmd /u /von /c "type %tempF%"^|find /n /v ""^|findstr /n "( )" ') do (
setlocal enabledelayedexpansion
set "Lo=!Line:*:=!"
if %%k equ ^( (
set "Li=!Lo:~0,%%j!"
set "Li=!Li:~-5!"
if /i !Li! equ echo^( (endlocal) else echo !Li! &for /f "delims=" %%a in ("!in! %%j") do (
endlocal &set "in=%%~a" &set /a "Level +=1", L"=1"
)
) else (
set "Lo=:!Lo!"
echo !Lo:~%%j,5!
for /f "delims=" %%a in ("!out! %%j") do endlocal &set "out=%%~a" &set /a "Level -=1" &set "L=1"
)
)
if defined L (
echo(%%I
setlocal enabledelayedexpansion
if !Level! gtr !Last! echo BEGIN ^( BLOCK
if defined in ( if defined out (
echo %%N - in: !in! out: !out!
) else (echo %%N - in: !in!)
)else echo %%N - out: !out!
if !Level! lss 0 ( echo FEHLER
) else if !Level! lss !Last! (
echo End BLOCK ^)
)
)
echo -- LEVEL = !Level! &echo(
endlocal
set /a Last=Level
) )
)
endlocal
if not errorlevel 1 echo(
if errorlevel 1 echo keine Klammern gefunden!
echo(
if /i "%~2" neq "" goto :eof
rem Scriptende
%EchoBack%
%CMDPause%exit /b &rem Scriptende
rem checkCMD END
:rem this following things are not Included
:: only for testing
rem Blockline - Zeilenübergreifend
call set "Blockline=%%N,%%Blockline%%"
rem nBlock - Einzeilig
call set nBlock=%%nBlock%% %%j
call set "Blockline=%%Blockline:*,=%%"
if a == b for /l %%T in (!level! 1 !last!)do for /f "delims=," %%B in ("!Blockline!")do (
set "Blockline=!Blockline:*,=!"
rem Phase 2 Spezialzeichen -> Execute: ^ ( ) " & < > | , ; = [space] [TAB] : ' `
rem NORMAL ^( ^) ^" ^& ^< ^> ^| ^[space] ^[TAB] ^, ^; ^= ^: ^' ^`
rem A0: " -> Stringflag 1 = first " ; B0: Stringflag -1 = 0 = next " ; -> A0: -> B0: [...]
rem A1: Caret next Sign = Normal ; A2: Caret before CRLF -> noCR -> LF = MultiLine
rem A3: LF - ENDParse
rem A4: ( -> LEVEL +1 = first TOKEN ; B4: ) -> LEVEL -1 ; LEVEL > 0 -> = MultiLine
rem A5: | -> Restart Phase LEFT and RIGHT ; A6: || -> if RIGHT ERROR ExeCute LEFT
rem A6: TokenLIST -> LEVEL = 0 -> " [space] , ; = & | < > ( , "
rem B6: TokenLIST -> LEVEL > 0 -> " [space] , ; = & | < > ( , " )
rem A7: Command IF -> EXTRA
rem B7: Command REM -> first second TOKEN
rem C7: Command FOR -> EXTRA
rem Phase 4 ForLoopVars
rem Phase 6
rem Phase 5 DelayedExpansion ; cmd /vON
rem rem ...
rem Phase 3 ECHO ON 0 (call Block ; For Loop -> (Loop) ; ( Loop ) ; EXPansion
rem call Block -> first ECHO
rem For Loop -> see 0 (ECHO ON): LoopVarNames ; exeCute: Content of LoopVar
::Weitere Pruefungen ...
rem :Sprungmarke Leerzeichen TAB(TAB) Beschreibung
%CMDPause%%EchoBack%exit /b &rem Scriptende