Windows-Befehlswarteschlange

5349
Stefano

Ich denke, wenn es eine Art Software gibt, die eine Reihe von Windows-Befehlen in eine Warteschlange stellen kann. Zum Beispiel kann ich sagen, dass Sie zuerst eine Datei irgendwo kopieren, diese dann umbenennen, die alten Dateien löschen, dann eine davon bearbeiten usw., ohne die effektive Ausführung dieser Passagen abzuwarten. Dies kann nützlich sein, wenn Sie große Dateien kopieren, die sehr viel Zeit in Anspruch nehmen, und ich möchte nicht vor dem Computer sitzen und die Fortschrittsleiste im Auge behalten.

Gibt es so etwas?

1

3 Antworten auf die Frage

1
William Hilsum

Am einfachsten ist es, eine Batchdatei für das, was Sie tun möchten, zu schreiben. Öffnen Sie beispielsweise den Editor und kopieren Sie Folgendes:

@echo off echo Starting batch script copy c:\temp\*.* c:\temp2\*.* del c:\temp2\test.exe echo all file operations complete 

Speichern Sie dieses als irgendwo .bat und Sie können es entweder durch Doppelklick ausführen oder zur Eingabeaufforderung gehen und den Namen eingeben. Alle Operationen, die Sie darin schreiben, werden der Reihe nach abgearbeitet.

Ja, ich kenne diese Lösung, aber es ist etwas frustrierend, jedes Mal die Pfade aufzuschreiben ... Diese Funktionalität sollte in Windows integriert werden, aber sie sind zu faul :( Stefano vor 14 Jahren 0
Sie suchen also nach einem Programm, das "weiß", wo Sie Dateien kopieren möchten und welche Sie möglicherweise bearbeiten möchten. Wie wäre es in Wil's Beispiel, ändern Sie die Pfade mit Variablen: `copy% 1%% 2%` ?? DaveParillo vor 14 Jahren 2
Was ist mit Aufgaben, die normalerweise keine Befehle verwenden? Zum Beispiel Drag & Drop-Aufgaben oder Kontextmenüaufgaben. Ich würde gerne 7zip warten, bis der vorherige Auszug fertig ist, bevor mit einer neuen Extraktion begonnen wird. syockit vor 13 Jahren 0
@syockit - benutzte die 7zip-Kommandozeilenversion, extrahiere in ein temporäres Verzeichnis, mache die Operationen damit usw. Es gibt fast immer eine Möglichkeit, die Kommandozeile für alles zu benutzen! William Hilsum vor 13 Jahren 0
@Wil beachten Sie, dass es nicht nur 7zip sein muss; Es kann jede Windows-Aktion für diese Angelegenheit sein. Batch ist großartig, wenn Sie vorher wissen, was Sie tun möchten. Manchmal möchten Sie jedoch nach dem Starten einer Aufgabe eine weitere Aufgabe zur Warteschlange hinzufügen, und Sie möchten ausdrücklich, dass diese nach Abschluss der letzten Aufgabe gestartet wird. Gibt es eine Möglichkeit, dies zu tun? Bei den meisten Zeitplänen, die ich kenne, können Sie die Uhrzeit einstellen, andere Bedingungen jedoch nicht. syockit vor 13 Jahren 0
@Syockit - Sie können ein .bat tatsächlich ändern, während es ausgeführt wird, und wenn es diese Zeile noch nicht erreicht hat, wird der neue Befehl ausgeführt ... ZB wenn ich "Echo-Test, Pause" schreibe und während der Pause, Ich ändere zu "Echotest, Pause, Echo blabla" ... wenn ich die Eingabetaste drücke, sehe ich tatsächlich Blabla. William Hilsum vor 13 Jahren 4
@ Will: Ordentlich! Ich habe immer gedacht, dass ".bat" vor der Ausführung in den Speicher gelesen wird. Jetzt weiß ich, dass es Zeile für Zeile liest, nachdem der letzte Befehl ausgeführt wurde. syockit vor 13 Jahren 0
@syockit - tbh, selbst nach über 15 Jahren Verwendung habe ich erst vor ein paar Wochen herausgefunden, dass dies aus Versehen möglich war! William Hilsum vor 13 Jahren 0
1
rapia19

Ich habe dieses kleine Batch-Skript vor einiger Zeit unter dem Namen QSTART. Vielleicht wird es helfen.

Sie können damit (theoretisch) Warteschlangen von beliebigen BATCH-Befehlen erstellen und ausführen. Warteschlangen sind reine Textdateien, die im %TEMP%Verzeichnis gespeichert werden .

Es ist ein sehr einfaches Skript, das ich verwende, um beispielsweise Zip-Befehle bei Backups in die Warteschlange zu stellen.

Ich habe nicht viel debuggen, deshalb können Sie eventuell vorhandene Fehler korrigieren. Ich bin nicht zu 100% sicher, ob er jeden BATCH-Befehlsstring richtig verarbeitet, er sollte jedoch für einfache Aufgaben geeignet sein.

Wichtig. Jeder Befehl in der Warteschlange wird genau so ausgeführt, wie er ist. Das Skript prüft nicht auf Fehler, aber das kann durch einfache ERRORLEVELÜberprüfung innerhalb der FORSchleife behoben werden.

Ich bin auch kein professioneller Programmierer und weiß, dass das Skript etwas chaotisch ist (dh ich wusste keine andere Möglichkeit, einen Befehl in der Warteschlange auszuführen; der integrierte STARTBefehl funktioniert bei mir manchmal nicht).

Am Ende des Skripts finden Sie Hilfe und einige Beispiele. Verwenden Sie QSTARTohne Argumente, um es anzuzeigen.

@echo OFF setlocal  rem qstart root directory set ROOT=%~dp0 call :DEBUG "qstart root directory: %ROOT%"  rem queue storage directory set QDIR=%TMP% call :DEBUG "queue directory: %QDIR%"  rem 1.parameter (mandatory) - queue ID rem if no queue ID given display help message set QID=%~1 call :DEBUG "queue ID: %QID%" if "%QID%"=="" goto :MSG_HELP set QFILE=%QDIR%\%QID%.Q call :DEBUG "queue file: %QFILE%" shift  rem 2. parameter (mandatory) - queue operation set QOP=%~1 shift call :DEBUG "queue operator: %QOP%"  if "%QOP%"=="add" goto :QADD if "%QOP%"=="list" goto :QLIST if "%QOP%"=="load" goto :QLOAD if "%QOP%"=="new" goto :QNEW if "%QOP%"=="remove" goto :QREMOVE if "%QOP%"=="run" goto :QRUN if "%QOP%"=="save" goto :QSAVE goto :ERR_SYNTAX  rem add command to queue rem create queue if not exists :QADD if not exist "%QFILE%" call :QNEW set QCMD=: :NEXTPAR set QCMD=%QCMD% %1 shift if not "%~1"=="" goto :NEXTPAR set QCMD=%QCMD:: =% call :DEBUG "queued command: %QCMD%" echo %QCMD% >>"%QFILE%" goto :EOF  rem list queued commands rem warn if queue not exists :QLIST if not exist "%QFILE%" ( call :ERR_BADQID ) else ( type "%QFILE%" ) goto :EOF  rem import queue from file rem create queue if not exists rem warn if file not exists :QLOAD if not exist "%QFILE%" call :QNEW set FILE=%~1 call :DEBUG "load file: %FILE%" if not exist "%FILE%" ( call :ERR_NOFILE ) else ( copy /B /Y "%QFILE%"+"%FILE%" "%QFILE%" >NUL ) goto :EOF  rem clear queue rem create queue if not exists :QNEW if exist "%QFILE%" call :QREMOVE copy /B /Y NUL "%QFILE%" >NUL goto :EOF  rem remove queue rem warn if queue not exists :QREMOVE if not exist "%QFILE%" ( call :ERR_BADQID ) else ( del /F /Q "%QFILE%" >NUL ) goto :EOF  rem execute queued commands rem clear queue after execution :QRUN if not exist "%QFILE%" ( call :ERR_BADQID ) else ( setlocal ENABLEDELAYEDEXPANSION for /F "tokens=* delims=" %%C in (%QFILE%) do (  %%C rem alt.way of execution: start "" /B /WAIT %%C  call :DEBUG "ERROR LEVEL of last operation: !ERRORLEVEL!" ) endlocal rem call :QREMOVE call :QREMOVE ) goto :EOF  rem export queue to file rem warn if queue not exists rem overwrite file if exists :QSAVE set FILE=%~1 call :DEBUG "save file: %FILE%" if not exist "%QFILE%" ( call :ERR_BADQID ) else ( copy /B /Y "%QFILE%" "%FILE%" >NUL ) goto :EOF   rem messages ------------------------------------------------------------------  rem bad syntax error rem show help :ERR_SYNTAX echo ERROR: syntax error call :MSG_HELP goto :EOF  rem bad queue id error :ERR_BADQID echo ERROR: bad queue ID '%QID%' goto :EOF  rem file not found error :ERR_BADFILE echo ERROR: file not found '%FILE%' goto :EOF  rem usage information :MSG_HELP echo qstart v.0.1.5 - by rapia19@interia.pl echo Allows to create and execute queues of BATCH commands. echo. echo USAGE: qstart  echo qstart {-h^|--help^|?^|/?} echo queue ID echo queue operator echo queued command call echo import/export filename echo -h --help ? or /? shows ^(this^) help message echo Allowed operations: echo add adds command to the queue echo list lists all queued commands echo load imports ^(appends^) queued commands from a file echo new creates new or clears existing queue echo remove deletes queue echo run executes all queued command and deletes queue echo save exports queue to a file echo ALSO: echo set QDEBUG=1 turns on displaying debug messages echo EXAMPLES: echo qstart Hello add echo "Hello world!" echo qstart Hello add pause echo qstart Hello list echo qstart Hello save Hello-copy.txt echo qstart Hello new echo qstart Hello load Hello-copy.txt echo qstart run pause goto :EOF  rem display debug message and pause :DEBUG if "%QDEBUG%"=="1" ( echo ### DEBUG INFO ### %~1 pause >NUL ) goto :EOF 
Ahum, "kleines" Batch-Skript? Nett! Arjan vor 10 Jahren 0
0
user38983

Sie können auch GNU Make für Windows in Betracht ziehen . Es ist eine einzelne Binärdatei (im Gegensatz zu einer typischen Skriptsprache) und kann verschiedene Befehlsfolgen aus einem Makefile ausführen, mit einer fein abgestimmten Steuerung, um fortzufahren oder abzubrechen, wenn ein einzelner Befehl ausfällt. Es hat auch weitaus bessere Mechanismen für die Weitergabe und Ersetzung von Variablen pro Ziel als ein Batch-Skript.

Ich verwende es häufig, um kurze Befehlssequenzen unter Windows zu speichern und aufzurufen, die ich mehrmals oder zweimal ausführte, insbesondere wenn ich die Befehlssequenz zu einem bestimmten Zeitpunkt erstelle und später ausführen muss.