Очередь команд Windows?

5244
Stefano

Я думаю, существует ли какое-то программное обеспечение, которое может поставить в очередь кучу команд Windows. Например, я могу сказать: сначала скопируйте куда-нибудь какой-нибудь файл, затем переименуйте его, затем удалите старые файлы, затем отредактируйте один из них и т. Д., Не дожидаясь эффективного выполнения любого из этих отрывков. Это может быть полезно при копировании больших файлов, которые занимают много времени, и я не хочу сидеть перед компьютером, следя за индикатором выполнения.

Существует ли что-нибудь подобное?

1

3 ответа на вопрос

1
William Hilsum

проще всего написать пакетный файл для того, что вы хотите сделать, например, открыть блокнот и скопировать следующее:

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

Затем сохраните это где-нибудь как .bat, и вы можете запустить его, либо дважды щелкнув мышью, либо перейдя в командную строку и введя его имя. Все операции, которые вы пишете в нем, будут обработаны по порядку.

да, я знаю это решение, но немного расстраивает каждый раз, когда записывают пути ... эта функция должна быть интегрирована с окнами, но они слишком ленивы :( Stefano 14 лет назад 0
So... you're looking for a program that "knows" where you want to copy files and which ones you might want to edit? How about in Wil's example change the paths with variables: `copy %1% %2%` ?? DaveParillo 14 лет назад 2
А как насчет задач, которые обычно не используют команды? Например, задача перетаскивания или задачи контекстного меню. Я бы хотел, чтобы 7zip дождался окончания предыдущего извлечения, прежде чем начинать новое извлечение. syockit 13 лет назад 0
@syockit - использовала версию командной строки 7zip, распаковала ее во временный каталог, выполнила операции над этим и т. д. Почти всегда есть способ использовать командную строку для чего угодно! William Hilsum 13 лет назад 0
@ Обратите внимание, что это не должно быть просто 7zip; это может быть любое действие Windows в этом отношении. Пакет отлично подходит, когда вы знаете, что вы хотите сделать заранее. Но иногда, после запуска задачи, вы хотите добавить еще одну задачу в очередь и явно хотите, чтобы она запускалась после завершения последней задачи. Теперь, есть ли способ сделать это? Большинство известных мне планировщиков позволят вам установить время, но не другие условия. syockit 13 лет назад 0
@Syockit - вы можете изменить .bat во время его работы, и если он еще не достиг этой строки, он запустит новую команду ... Например, если я напишу «эхо-тест, пауза» и во время паузы, Я изменяю на «эхо-тест, пауза, эхо-блабла» ... когда я нажимаю клавишу ввода, я на самом деле вижу блабла. William Hilsum 13 лет назад 4
@Wil: аккуратно! Я всегда думал, что `.bat` читается в память перед выполнением. Теперь я знаю, что он читает построчно после выполнения последней команды. syockit 13 лет назад 0
@syockit - tbh, даже после 15 с лишним лет их использования, я обнаружил, что это было возможно случайно несколько недель назад! William Hilsum 13 лет назад 0
1
rapia19

Я написал этот небольшой пакетный сценарий некоторое время назад называется QSTART. Может быть, это поможет.

Это позволяет (теоретически) создавать и выполнять очереди любых команд BATCH. Очереди представляют собой простые текстовые файлы, хранящиеся в %TEMP%каталоге.

Это очень простой скрипт, который я использую, т. Е. Ставить в очередь команды zip при создании резервных копий.

Я не делал много отладки, поэтому не стесняйтесь исправлять любые существующие ошибки. Я не уверен на 100%, правильно ли она обрабатывает каждую командную строку BATCH, но она должна подходить для простых задач.

Важный. Каждая команда в очереди выполняется точно так, как она есть. Скрипт не проверяет наличие ошибок, но простая ERRORLEVELпроверка внутри FORцикла может исправить это.

Кроме того, я не профессиональный программист и знаю, что скрипт немного запутан (т.е. я не знал другого способа запуска команды из очереди; встроенная STARTкоманда иногда не работает для меня).

В конце скрипта есть справка и несколько примеров. Используйте QSTARTбез аргументов для отображения.

@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 
Ах, "маленький" пакетный скрипт? Ницца! Arjan 10 лет назад 0
0
user38983

Вы также можете рассмотреть GNU Make для Windows . Это один двоичный файл (в отличие от типичного языка сценариев), который может запускать различные последовательности команд из одного файла Makefile, с детальным управлением для продолжения или прерывания при сбое любой отдельной команды. Он также имеет гораздо лучшие механизмы распространения и замены переменных для каждой цели, чем пакетный скрипт.

Я часто использую его для хранения и вызова коротких последовательностей команд в Windows, которые я запускаю более одного или двух раз, особенно если я создаю последовательность команд в определенное время и мне нужно запустить ее позже.