Ommaviy ish faylidan chiqishni qayta yo'naltirish, JUMLADAN buyruqlar

Menda bir qator buyruqlarni bajaradigan ommaviy ish fayli bor. Har biri bajarilganda, u "muvaffaqiyatli" yoki "muvaffaqiyatsiz" xabarini qaytaradi. Ularning har biridan chiqishni >> yordamida qayta yo'naltirish va uni faylga yuborish juda oddiy, ammo tegishli buyruqsiz chiqish foydasiz.

(Ommaviy fayl)

Command "D21" >> Myfile.txt
Command "D22" >> Myfile.txt
Command "D23" >> Myfile.txt
Command "D24" >> Myfile.txt

(Chiqish fayli: Myfile.txt)

Fail
Succeed
Fail
Succeed

Men qilmoqchi bo'lgan narsa shu faylga bajarilgan buyruqni yuborishdir, shunda u shunday ko'rinishi mumkin ...

(Istalgan chiqish fayli: Myfile.txt)

Command "D21" Fail
Command "D22" Fail
Command "D23" Succeed
Command "D24" Succeed

Buni qanday qilib minimal kuch bilan bajarishim mumkinligi haqida har qanday fikr bormi?


person user1408899    schedule 21.05.2012    source manba
comment
StackOverflow-ga xush kelibsiz. Iltimos, kodingizni to'g'ri formatlash uchun joylashtirishga vaqt ajrating. Buni kamida to'rtta bo'sh joy qo'yish yoki barcha kodni tanlash va jingalak qavslar ({}) bo'lgan asboblar paneli tugmachasini bosish yoki Ctrl+K tugmalarini bosish orqali amalga oshirishingiz mumkin. Siz o'z postingizni WYSIWYG uslubida kiritganingizda uni matn maydoni ostida to'g'ridan-to'g'ri ko'rishingiz mumkin, shuning uchun uni joylashtirishdan oldin uni real vaqt rejimida to'g'ri formatlashingiz mumkin. Shuningdek, iltimos, postlaringizda imzolardan foydalanmang; sizning hisobingiz bilan bog'langan profil sahifangiz bor, bu sizning ismingiz kabi shaxsiy ma'lumotlarni joylashtirish imkonini beradi. rahmat. :)   -  person Ken White    schedule 22.05.2012


Javoblar (3)


O'ylaymanki, siz aks-sado qilingan buyruqlar va chiqishlarni butun partiyani emas, balki to'plam ichida tanlab yo'naltirishni xohlaysiz.

@echo off
echo before not echoed, not captured
call :echoCommands >myFile.txt
echo after not echoed, not captured
exit /b

:echoCommands
echo on
Command "D21"
Command "D22"
Command "D23"
Command "D24"
@echo off
exit /b

Agar siz butun ommaviy ish faylini yozib olishni istasangiz, shunchaki skriptdan qayta yo'naltirishni olib tashlang, aks-sadoni o'chirmang va ommaviy ish skriptiga qo'ng'iroq qilganingizda qayta yo'naltiring.

myScript >myFile.txt

Agar siz butun fayl chiqishini buyruqlar bilan yozib olishni istasangiz va siz haqiqatan ham skript ichida qayta yo'naltirishni xohlasangiz, shunga o'xshash narsa

@if "%~1" neq "_GO_" (
  >myFile.txt call "%~f0" _GO_ %*
  exit /b
)
@echo on
Command "D21"
Command "D22"
Command "D23"
Command "D24"

Yuqoridagi barcha echimlarda har bir buyruq bitta satrda chop etiladi va chiqish keyingi satr(lar)da bo'ladi.

person dbenham    schedule 22.05.2012

Bu buyruq va javobni bir qatorga qo'yish usuli

@echo off
for /f "skip=6 delims=" %%i in (%~dpnx0) do (
    <nul set /p =%%i >> MyFile.txt
    %%i >> MyFile.txt
)
goto :eof
Command "D21"
Command "D22"
Command "D23"
Command "D24"
person panda-34    schedule 24.05.2012

Buning uchun ikkita usul mavjud. Birinchisi biroz "sirli", lekin u bir qatorli buyruqda amalga oshiriladi:

for %%f in ("Command "D21"" "Command "D22"" "Command "D23"" "Command "D24"") do for /F "usebackq delims=" %%g in (`%%~f`) do echo %%~f %%g >> MyFile.txt

Bu juda yaxshi ishlashi kerak. Koʻproq Command "xxx" qoʻshish biroz noqulay.

Ikkinchi usul - ishni boshqarish uchun "kichik dastur" dan foydalanish:

@echo off

call :work Command "D21"
call :work Command "D22"
call :work Command "D23"
call :work Command "D24"
goto :EOF



:work
for /F "usebackq delims=" %%g in (`%*`) do echo %* %%g
goto :EOF
person Kevin Fegan    schedule 13.06.2013