Problem
Jag försöker skapa en batchfil som gör dessa saker:
- Flytta någon mapp
- ring en annan satsfil
- Kopiera resultatet av batchfilen till Urklipp
- kör imacros (imacros kommer att använda urklippet)
Så det viktiga är att jag måste vara säker på varje steg som det är klart. Eftersom varje steg är fäst ihop.
Min fråga är hur kan jag göra det? Jag läste någonting om SLEEP, PING, TIMEOUT, PAUSE osv. Men jag vet inte mycket om nackdelar och nackdelar. Kan någon ge några tips om dessa kommandon eller vilka ska jag använda för säker programmering?
Inte: Jag jobbar på Windows XP och Windows Server 2008
Och här är min
satsnummer :
@echo off
set cwd=D:worksetxxyyy
set wp=D:worksetxxyyyyzzzzz
:: ensure folder exist
mkdir \%cwd\% > nul 2>&1
mkdir \%wp\%done > nul 2>&1
d:
cd \%wp\%
:export
::echo tidy folder \%wp\%
for \%\%i in (xx\_to\_yy*.zip) do (
move "\%\%i" "done\%\%i"
)
echo call \%cwd\%aaa\_bbb\_export.bat
call \%cwd\%aaa\_bbb\_export.bat 5555
@echo off
for \%\%i in (xx\_to\_yy*.zip) do (
echo \%wp\%\%\%i | clip
move "\%\%i" "done\%\%i"
)
@echo off
:finish
start "" "C:Program FilesMozilla Firefoxfirefox.exe" http://www.google.com
ping 127.1.1.1
start "" "C:Program FilesMozilla Firefoxfirefox.exe" imacros://run/?m=yyy.iim
Bästa referens
Att använda kommandot
pause
och
echo
är ett bra sätt att felsöka en bit scrip i batch.
Lägg bara till:
Echo Task Complete: [Description] : Continue ?&>nul pause
I slutet av varje uppgift. På så sätt kan du kontrollera om allting är bra innan du ger allt klart för att du ska fortsätta batchfilen. Senare lär du dig att göra felkontroll i batchfiler, i vilket fall du kan göra något liknande med ett felmeddelande och inkludera lösningar som alternativ.
Redigera:
Om du vill automatisera skriptet, så att det inte behöver användarinmatning, och istället försöker kontrollera om ett fel inträffat kan du antingen:
- Kontrollera manuellt, det vill säga 1: kolla om mappen har flyttats, 2: kolla om andra batchfiler gjorde vad det behövde (skapa nya filer etc.) 3: Kontrollera om urklippet har sufficienta rader som är resultatet av batchfiler (kanske rensa det i början) och slutligen kontrollera om imacros gjorde vad som behövdes
- Kontrollera om kommandon lyckades. (omdirigera fel till en textfil och se sedan om de var några.
Sedan vet jag inte exakt vad du gör, jag kan bara hjälpa dig med vitfall 2 (även om 1 skulle bli bättre). Du omdirigerar felen som sådan:
command [parameters] 2>>errors.log
Och i slutet av varje avsnitt:
set /p error=<errors.log
if defined error (
Echo An Error Occured : Last Step == [Step Description]
ECHO ---------- RUN : \%Date\% \%Time\% ----------
type errors.log >> error-log.txt
del errors.log
if "\%~1"=="RESTART" (
Echo Error Occured Two Times in a Row . . .
Echo Exiting in 20 seconds . . .
Exit /b 9
)
Echo Restarting procedure in 60 seconds . . .
sleep 60
Start \%~f0 "RESTART"
Exit
)
Ovanstående kod kommer att kontrollera om det fanns några fel, lägg till dem i en logg som heter error-log.txt. Om det uppstår ett fel startar det om och om det finns ett fel igen, kommer den att gå ut. Det kommer att finnas en liten paus före någon av dessa händelser, incase du vill avbryta den (helt enkelt stäng)
Hoppas att du fann det här till hjälp,
Mona.
Andra referenser 1
Första alternativet är, efter varje 'kritiskt' kommando, leta efter errorlevel
copy someThing someWhere
if errorlevel 1 (
rem something goes bad
goto somewhereToHandleIt
)
Alternativt kan du lägga till kod för att kontrollera att operationen var framgångsrik, att testa allt är där det är avsedd att vara. Men första alternativet är oftast bättre. Lita på systemet, det kommer att göra arbetet och rapportera när problem uppstår.