Fila de comandos do Windows?

1

Estou pensando se existe algum tipo de software que pode colocar em uma fila um monte de comandos do windows. Por exemplo, posso dizer para primeiro copiar algum arquivo em algum lugar, depois renomeá-lo, excluir os arquivos antigos, editar um deles, etc., sem esperar a execução efetiva de qualquer uma dessas passagens. Isso pode ser útil ao copiar arquivos grandes que demoram muito e eu não quero sentar na frente do computador, mantendo os olhos na barra de progresso.

Existe algo assim?

    
por Stefano 05.11.2009 / 23:55

3 respostas

1

A melhor coisa a fazer é escrever um arquivo de lote para o que você quer, por exemplo, abrir o bloco de notas e copiar o seguinte:

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

Em seguida, salve isso em algum lugar como qualquer coisa .bat e você pode executá-lo clicando duas vezes ou indo para o prompt de comando e digitando seu nome. Todas as operações que você escrever serão processadas em ordem.

    
por 05.11.2009 / 23:59
1

Eu escrevi este pequeno script de lote há algum tempo chamado QSTART . Talvez isso ajude.

Permite que você (em teoria) crie e execute filas de qualquer comando BATCH. Filas são arquivos de texto simples armazenados no diretório %TEMP% .

É um script muito simples que uso, por exemplo, para colocar em fila comandos zip ao fazer backups.

Eu não fiz muita depuração, por isso, sinta-se livre para corrigir quaisquer bugs existentes. Não tenho 100% de certeza se ele lida corretamente com todas as sequências de comando do BATCH, mas isso deve servir para tarefas simples.

Importante. Todo comando enfileirado é executado exatamente como é. O script não verifica se há erros, mas a validação simples de ERRORLEVEL dentro do loop FOR pode corrigir isso.

Além disso, eu não sou um programador profissional e estou ciente de que o script é um pouco confuso (ou seja, eu não conhecia outra maneira de executar o comando enfileirado; o comando START embutido às vezes não funciona para mim).

Há ajuda e alguns exemplos no final do script. Use QSTART sem argumentos para exibi-lo.

@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
    
por 08.02.2014 / 12:54
0

Você também pode considerar o GNU Make for Windows . É um único binário (em oposição a uma linguagem de script típica) e pode executar diferentes sequências de comandos a partir de um Makefile, com controle refinado para continuar ou interromper o failover de qualquer comando individual. Ele também tem mecanismos de propagação e substituição de variáveis por alvo muito melhores do que um script em lote.

Eu o uso com frequência para armazenar e invocar seqüências de comando curtas no Windows que eu executo mais de uma ou duas vezes, especialmente se eu criar a sequência de comandos em um determinado momento e precisar executá-la mais tarde.

    
por 17.09.2018 / 06:32