Inspired by The Great Escape
Sometimes I want to execute commands inside a for /f AND redirect the output AND act upon succes or failure.
Code: Select all
@echo off &prompt $G &setlocal enableDelayedExpansion
reg.EXE delete "HKLM\SOFTWARE\ED" /f>nul 2>&1
set ^"$v=0^^^c ^^^e ^^^q^^^c ^^^e^^^q ^^^c ^^^e" !
set ^"$d=0^^^c ^^^e ^^^q^^^c ^^^e^^^q ^^^c ^^^e" !
call :regadd
set ^"$v=1^^^c ^^^e ^^^"^^^c ^^^e^^^q ^^^c ^^^e" !
set ^"$d=1^^^c ^^^e ^^^q^^^c ^^^e^^^q ^^^c ^^^e" !
call :regadd
set ^"$v=2^^^c ^^^e ^^^"^^^c ^^^e^^^" ^^^c ^^^e" !
set ^"$d=2^^^c ^^^e ^^^"^^^c ^^^e^^^q ^^^c ^^^e" !
call :regadd
set ^"$v=3^^^^ ^^^e ^^^"^^^^ ^^^e^^^q ^^^^ ^^^e" !
set ^"$d=3^^^^ ^^^e ^^^"^^^^ ^^^e^^^q ^^^^ ^^^e" !
call :regadd
set ^"$v=4^^^^ ^^^! ^^^"^^^^ ^^^!^^^q ^^^^ ^^^!" !
set ^"$d=4^^^^ ^^^! ^^^"^^^^ ^^^!^^^q ^^^^ ^^^!" !
call :regadd
set ^"$v=5^^^^ ^^^! ^^^"^^^^ ^^^!^^^" ^^^^ ^^^!" !
set ^"$d=5^^^^ ^^^! ^^^"^^^^ ^^^!^^^" ^^^^ ^^^!" !
call :regadd
reg.EXE query "HKLM\SOFTWARE\ED"
pause
exit
:regadd
:: (
echo.
echo.$v=!$v!_
echo.$d=!$d!_
:: reg escape quotes
set $v=!$v:"=\"!
set $d=!$d:"=\"!
:: reg enclose quotes
set $v="!$v!"
set $d="!$d!"
for %%? in ( $v, $d ) do call :quoteEven %%?
set "$a=reg.EXE add "HKLM\SOFTWARE\ED" /v !$v! /d !$d! /f"
for /f "delims=" %%? in (
'echo.!"!^(^!$a^!^)!"! ^^^!'
) do echo.%%?
for /f "delims=" %%? in (
'^(^!$a^!^)^|^|echo.error'
) do echo.%%?
:: )
exit /b 0
:quoteEven
:: (
set "$=!%~1!"
:: delay twice, add quoted detector
set "?=!$!"
::
set "?=!?:"=""!"
set "?=!?:^=^^^^!" &call set "?=%%^?:^!=#"#"^!%%" &set "?=!?:#"#"=^^^!"
set "?=!?:""="!"
::
set "?=%?%^!#q#^!"
:: delay special characters inside quotes
set "$=!$:^=^^!" &call set "$=%%^$%%" !
:: quote evenly
if "!?:~-5!" neq "^!#q#^!" (
echo.escape uneven quote
set "$=!$:~0,-1!^^^""
)
set "%~1=!$!"
:: )
exit /b 0
Code: Select all
$v=0c e qc eq c e_
$d=0c e qc eq c e_
(reg.EXE add "HKLM\SOFTWARE\ED" /v "0c e qc eq c e" /d "0c e qc eq c e" /f)
De bewerking is voltooid
$v=1c e "c eq c e_
$d=1c e qc eq c e_
escape uneven quote
(reg.EXE add "HKLM\SOFTWARE\ED" /v "1c e \"c eq c e^" /d "1c e qc eq c e" /f)
De bewerking is voltooid
$v=2c e "c e" c e_
$d=2c e "c eq c e_
escape uneven quote
(reg.EXE add "HKLM\SOFTWARE\ED" /v "2c e \"c e\" c e" /d "2c e \"c eq c e^" /f)
De bewerking is voltooid
$v=3^ e "^ eq ^ e_
$d=3^ e "^ eq ^ e_
escape uneven quote
escape uneven quote
(reg.EXE add "HKLM\SOFTWARE\ED" /v "3^ e \"^^ eq ^^ e^" /d "3^ e \"^^ eq ^^ e^"/f)
De bewerking is voltooid
$v=4^ ! "^ !q ^ !_
$d=4^ ! "^ !q ^ !_
escape uneven quote
escape uneven quote
(reg.EXE add "HKLM\SOFTWARE\ED" /v "4^ ! \"^^ !q ^^ !^" /d "4^ ! \"^^ !q ^^ !^"/f)
De bewerking is voltooid
$v=5^ ! "^ !" ^ !_
$d=5^ ! "^ !" ^ !_
(reg.EXE add "HKLM\SOFTWARE\ED" /v "5^ ! \"^^ !\" ^ !" /d "5^ ! \"^^ !\" ^ !" /f)
De bewerking is voltooid
! REG.EXE VERSION 3.0
HKEY_LOCAL_MACHINE\SOFTWARE\ED
0c e qc eq c e REG_SZ 0c e qc eq c e
1c e "c eq c e REG_SZ 1c e qc eq c e
2c e "c e" c e REG_SZ 2c e "c eq c e
3^ e "^ eq ^ e REG_SZ 3^ e "^ eq ^ e
4^ ! "^ !q ^ ! REG_SZ 4^ ! "^ !q ^ !
5^ ! "^ !" ^ ! REG_SZ 5^ ! "^ !" ^ !
Druk op een toets om door te gaan. . .