2

少し古風な質問ですが、恐れ入りますが、次のとおりです。

私はいくつかの .RAW ファイルをシーケンスで生成するプログラムを持っています。

Example_1.RAW
Example_2.RAW

これにより、必要に応じて数値に有効数字が追加されます。

Example_10.RAW
Example_200.RAW

これらのファイル名をバッチ プロセッサを介して実行するための数値に変換する必要があります。バッチ プロセッサは、出力としてより多くのファイルを生成します。名前の変更を行い、古いファイル名と新しいファイル名をテキスト ファイルに保存するバッチ ファイルを作成しました。私のコードは次のとおりです。

@echo off
set i=1
echo Running Batch Rename
for %%f in (*.RAW) do (set file=%%f) & CALL :rename

:rename
echo %i% >>Names.txt
echo %file% >>Names.txt
echo. >>Names.txt
ren %file% %i%.RAW
set /A i+=1

これにより、すべての .RAW の名前が 1.RAW、2.RAW などに変更され、古いファイル名と新しいファイル名で Names.txt が作成されます。DOS が番号を処理する方法のおかげで、これは少し不安定な番号付けプロセスを取得することを意味します。つまり、Ex_1、Ex_10、Ex_100、Ex_101 を 1、2、3、4 として処理し、後処理でより多くの作業が必要になります。これらの結果の適切な場所で適切な結果を得るために。

Names.txt を取り、出力ファイルのプロセスを逆にする別のバッチ ファイルを作成することは可能でしょうか? したがって、1.raw、1.something、1.something その他のフォルダーを取得し、Names.txt を参照して、それらの名前を Example_1.raw などに変更しますか?

4

3 に答える 3

2

これは仕事をするはずです

@echo off
set cnt=0
del Names.txt > nul 2>&1
echo Running Batch Rename
for %%f in (*.RAW) do (
    set "file=%%f"
    CALL :renameToNumber
)
echo .. Do the jobs ...
rem ** As sample: copy the file
copy *.raw *.some
call :renameBack
exit /b

:renameToNumber
set /A cnt+=1
set "number=00000%cnt%"
set "number=%number:~-4%"
(echo %number% %file%) >> Names.txt
ren "%file%" %number%.RAW
exit /b

:renameBack
for /F "tokens=1,*" %%A in (names.txt) DO (
   set "number=%%A"
   set "filename=%%~nB"
   call ren %%number%%.* "%%filename%%_%%number%%.*"
   call echo ren %%number%%.* "%%filename%%_%%number%%.*"
)
exit /b
于 2012-06-19T09:51:07.540 に答える
2

「if errorlevel」を使用してディレクトリ内の最後のファイルをテストすることにより、既存のバッチルーチン内で機能するように上記のコードを適応させることができたので、最後のファイルに到達した後にルーチンが終了せず、代わりにに戻りました私のルーティーン。

    ::  *** Renumber .JPG files ***

    setlocal EnableDelayedExpansion
    set dir=C:%homepath%\Desktop\Temp

    :: Create variable and set to zero
    set cnt=0

    :: For each file in specified class
    for %%f in (%dir%\*.jpg) do (
        :: Get name of file 
        set "file=%%f"
        :: Run specified Subroutine
        CALL :renameToNumber
    )

    :renameToNumber
    :: Increment variable by 1
    set /A cnt+=1
    :: Preceed value of variable with 00000
    set "number=00000%cnt%"
    :: Delete all but final 2 digits
    set "number=%number:~-2%"
    :: Store new and original name of file
    (echo %number% %file%) >> Names.txt
    :: Rename file
    ren "%file%" %number%.jpg
    :: Quit Subroutine if no further files
    if errorlevel==1 goto :Continue
    :: Loop back to start of Subroutine
    exit /b

    :Continue

::  *** Zip the image files into an RAR file ***
    SET rar=C:\Program Files (x86)\WinRAR\RAR.exe
    "%rar%" a -ep -m0 temp.rar "%dir%\*.*"
于 2012-11-29T14:14:34.903 に答える
1

2 つのバッチ ファイルを用意できます。1 つは RAW ファイルの名前を 1.RAW、2.RAW などに変更するためのもので、もう 1 つはこのプロセスを元に戻すためのものです。

名前変更スクリプトは、対応する txt ファイルに RAW ファイルの元の名前を保存します。

@echo OFF
@setlocal ENABLEDELAYEDEXPANSION


set I=1

for %%G in (*.RAW) do (
    set ORIGINAL_NAME=%%~nG
    ( 
        REM Try to rename file
        ren "%%G" "!I!.RAW"
    ) && (
        REM Renaming was successful
        > "!I!.txt" echo !ORIGINAL_NAME!
        set /A I+=1
    ) || (
        REM Renaming was a failure
        echo Cannot rename [!ORIGINAL_NAME!.RAW] file.
    )
)

@endlocal

そして、RenameBack スクリプトはその情報を使用して、対応するすべてのファイルの名前を復元します。

@echo OFF
@setlocal ENABLEDELAYEDEXPANSION


for %%F in (*.txt) do (
    set BASENAME=%%~nF
    REM Read original name from txt file
    for /F %%G in (%%F) do (
        REM iterate over all corresponding files
        for %%H in (!BASENAME!.*) do (
            set EXTENSION=%%~xH
            REM Remove dot from extension string
            set EXTENSION=!EXTENSION:~1!
            if not "!EXTENSION!" == "txt" (
                REM Process files
                (
                    REM try to rename corresponding file to old name
                    ren "!BASENAME!.!EXTENSION!" "%%G.!EXTENSION!"
                ) && (
                    REM Operation was successful - remove TXT file
                    del /F /Q "%%F"
                ) || (
                    REM Something went wrong
                    echo Cannot restore old name for file [!BASENAME!.!EXTENSION!].
                )
            )
        )
    )
)

@endlocal
于 2012-06-19T10:21:50.657 に答える