Kolejka poleceń Windows?

1

Myślę, że jeśli istnieje jakieś oprogramowanie, które może umieścić w kolejce kilka poleceń systemu Windows. Na przykład mogę powiedzieć, aby najpierw gdzieś skopiować jakiś plik, następnie zmienić jego nazwę, a następnie usunąć stare pliki, a następnie edytować jeden z nich itp., Nie czekając na skuteczne wykonanie któregokolwiek z tych fragmentów. Może to być przydatne podczas kopiowania dużych plików, które zajmują dużo czasu i nie chcę siedzieć przed komputerem, wpatrując się w pasek postępu.

Czy coś takiego istnieje?

Stefano
źródło

Odpowiedzi:

1

najprościej jest napisać plik wsadowy do tego, co chcesz zrobić, na przykład otworzyć notatnik i skopiować następujące:

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

Następnie zapisz gdzieś jako dowolny plik .bat i możesz go uruchomić, klikając dwukrotnie lub przechodząc do wiersza polecenia i wpisując jego nazwę. Wszystkie operacje w nim napisane zostaną przetworzone w kolejności.

William Hilsum
źródło
tak, znam to rozwiązanie, ale zapisywanie ścieżek za każdym razem jest trochę frustrujące ... ta funkcja powinna być zintegrowana z oknami, ale są zbyt leniwe :(
Stefano,
2
Więc ... szukasz programu, który „wie”, gdzie chcesz skopiować pliki, a które możesz edytować? A może w przykładzie Wila zmień ścieżki ze zmiennymi: copy %1% %2%??
DaveParillo,
Co z zadaniami, które zwykle nie używają poleceń? Na przykład zadanie przeciągnij i upuść lub zadania z menu kontekstowego. Chciałbym, aby 7zip czekał na zakończenie poprzedniego wypakowania przed rozpoczęciem nowego rozpakowywania.
syockit
@syockit - używał wersji wiersza poleceń 7zip, wypakował do katalogu tymczasowego, wykonał operacje na nim itp. Prawie zawsze istnieje sposób na użycie wiersza poleceń do czegokolwiek!
William Hilsum
4
@Syockit - możesz zmodyfikować plik .bat podczas jego działania, a jeśli jeszcze nie osiągnął tego wiersza, uruchomi nowe polecenie ... Np. Jeśli napiszę „test echa, pauza” i podczas pauzy, Zmieniam na „test echa, pauza, echo blabla” ... kiedy naciśniesz enter, faktycznie zobaczę blabla.
William Hilsum
1

Jakiś czas temu napisałem ten mały skrypt wsadowy QSTART. Może to pomoże.

Pozwala (teoretycznie) na tworzenie i wykonywanie kolejek dowolnych poleceń BATCH. Kolejki to zwykłe pliki tekstowe przechowywane w %TEMP%katalogu.

Jest to bardzo prosty skrypt, którego używam, np. Do umieszczania w kolejce poleceń zip podczas wykonywania kopii zapasowych.

Nie robiłem dużo debugowania, więc nie krępuj się poprawiać istniejących błędów. Nie jestem w 100% pewien, czy poprawnie obsługuje każdy ciąg polecenia BATCH, ale powinien pasować do prostych zadań.

Ważny. Każde kolejkowane polecenie jest wykonywane dokładnie tak, jak jest. Skrypt nie sprawdza żadnych błędów, ale prosta ERRORLEVELweryfikacja w FORpętli może to naprawić.

Nie jestem też profesjonalnym programistą i zdaję sobie sprawę, że skrypt jest nieco niechlujny (tzn. Nie znałem żadnego innego sposobu uruchamiania polecenia w kolejce; wbudowane STARTpolecenie czasami nie działa dla mnie).

Na końcu skryptu znajduje się pomoc i kilka przykładów. Użyj QSTARTbez argumentów, aby go wyświetlić.

@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 [email protected]
    echo Allows to create and execute queues of BATCH commands.
    echo.
    echo USAGE: qstart {QUEUE_ID} {QUEUE_OPERATOR} {COMMAND or FILE}
    echo        qstart {-h^|--help^|?^|/?}
    echo   {QUEUE_ID}          queue ID
    echo   {QUEUE_OPERATOR}    queue operator
    echo   {COMMAND}           queued command call
    echo   {FILE}              import/export filename
    echo   -h --help ? or /?   shows ^(this^) help message
    echo Allowed operations:
    echo   add {COMMAND}   adds command to the queue
    echo   list            lists all queued commands
    echo   load {FILE}     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 {FILE}     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
rapia19
źródło
Ahum, „mały” skrypt partii? Miły!
Arjan
0

Możesz również rozważyć GNU Make dla Windows . Jest to pojedynczy plik binarny (w przeciwieństwie do typowego języka skryptowego) i może on uruchamiać różne sekwencje poleceń z jednego pliku Makefile, z precyzyjną kontrolą, aby kontynuować lub przerwać każdą awarię pojedynczego polecenia. Ma także znacznie lepsze mechanizmy propagacji i zastępowania zmiennych dla poszczególnych celów niż skrypt wsadowy.

Używam go często do przechowywania i wywoływania krótkich sekwencji poleceń w systemie Windows, które uruchamiam więcej niż raz lub dwa razy, szczególnie jeśli tworzę sekwencję poleceń w określonym czasie i muszę ją później uruchomić.

użytkownik38983
źródło