Windows Komutu sırası?


1

Bir sürü pencere komutunu sıraya sokabilecek bir yazılım olup olmadığını düşünüyorum. Örneğin, önce bir yere bir dosyayı kopyala, sonra isimlerini değiştir, daha sonra eski dosyaları sil, sonra bir tanesini değiştir vb. Çok fazla sayıda büyük dosyayı kopyalarken bu yararlı olabilir ve bilgisayardaki gözlerini ilerleme çubuğunda tutarak oturmak istemiyorum.

Böyle bir şey var mı?

Yanıtlar:


1

Yapılması en kolay şey, ne yapmak istediğinizi bir toplu iş dosyası yazmak, örneğin, not defteri açın ve aşağıdakileri kopyalayın:

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

Ardından, bunu herhangi bir yere .bat olarak kaydedin; çift tıklatarak veya komut istemine gidip adını yazarak çalıştırabilirsiniz. İçine yazdığınız tüm işlemler sırayla işlenir.


evet bu çözümü biliyorum, ama her seferinde yolları yazmak biraz sinir bozucu ... bu işlevsellik pencerelerle bütünleşmeli, ama çok tembeller :(
Stefano

2
Yani ... dosyaları nereye kopyalamak istediğinizi ve hangilerini düzenlemek isteyebileceğinizi "bilen" bir program mı arıyorsunuz? Wil'in örneğinde değişkenleri olan yolları değiştirmeye ne dersiniz: copy %1% %2%??
DaveParillo

Normalde komut kullanmayan görevlerden ne haber? Örneğin, sürükle ve bırak görevi veya bağlam menüsü görevleri. Yeni bir ekstraksiyona başlamadan önce 7zip'in önceki ekstrenin bitmesini beklemek istiyorum.
syockit

@ syockit - 7zip komut satırı sürümünü kullandı, geçici bir dizine çıkarttın, bu işlemleri yap. vb. Neredeyse her zaman komut satırını kullanmanın bir yolu var!
William Hilsum

4
@Syockit - aslında çalışırken bir .bat komutunu değiştirebilirsiniz ve eğer henüz bu satıra ulaşmadıysa, yeni komutu çalıştıracaktır. "Eko testi, duraklat, yankı blabla" yı değiştiriyorum ... Enter tuşuna bastığımda, aslında blabla göreceğim.
William Hilsum

1

Bir süre önce aranan bu küçük senaryoyu yazdım QSTART. Belki yardımcı olur.

Herhangi bir BATCH komutunun kuyruğunu yaratmanıza ve yürütmenize izin verir. Kuyruklar, %TEMP%dizinde kayıtlı düz metin dosyalarıdır .

Yedekleme yaparken zip komutlarını sıraya koymak için kullandığım çok basit bir script.

Çok fazla hata ayıklama yapmadım, mevcut hataları düzeltmekten çekinmeyin. Her BATCH komut dizesini doğru kullanıp kullanmadığından% 100 emin değilim, ancak basit görevler için uygun olmalı.

Önemli. Her sıraya alınmış komut tam olarak aynı şekilde çalıştırılır. Komut hataları kontrol etmez, ancak döngü ERRORLEVELiçindeki basit doğrulama FORbunu çözebilir.

Ayrıca profesyonel bir programcı değilim ve betiğin biraz karışık olduğunu biliyorum (yani, sıradaki komutu çalıştırmanın başka bir yolunu bilmiyordum; yerleşik STARTkomut bazen benim için çalışmıyor).

Senaryonun sonunda yardım ve bazı örnekler var. QSTARTGörüntülemek için argümanlar olmadan kullanın .

@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 {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

Ahum, "küçük" toplu komut dosyası? Güzel!
Arjan

0

GNU Make for Windows programını da düşünebilirsiniz . Tek bir ikili (tipik bir betik dili yerine) ve herhangi bir bireysel komut başarısızlığını devam ettirmek veya iptal etmek için ince taneli kontrolle tek bir Makefile'den farklı komut dizileri çalıştırabilir. Ayrıca, bir toplu komut dosyasından çok hedef başına değişken yayılma ve ikame mekanizmalarına sahiptir.

Windows’ta bir veya iki defadan fazla çalıştığım kısa komut dizilerini saklamak ve çağırmak için sık sık kullanıyorum, özellikle de komut dizisini belirli bir zamanda oluşturduysam ve daha sonra çalıştırmam gerekiyorsa.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.