2012-06-19 121 views
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 

這然後重命名我的所有.RAWs爲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等?

+0

你介意n個原始文件有n個txt文件嗎?如果沒有,您可以將原始原始文件名存儲在名稱與原始文件的新名稱相對應的txt文件中,例如。將Example_1.RAW存儲在1.txt文件中,並將Example_1.RAW重命名爲1.RAW。另一批將遍歷txt文件,找到相應的RAW文件並將其重命名爲以前的名稱。 – Helbreder

+0

Helbreder - 雖然也許不是最漂亮的解決方案,但我可以在完成後處理後刪除n個文本文件。我認爲原始代碼只需要修改即可將文件名回顯爲%i%.txt。任何線索反向代碼將是什麼? –

+0

這不會是一個問題。有些工具可以從文件名剝離擴展名。我會準備一個答案:) – Helbreder

回答

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 
+1

完美!我做的唯一更改是在最後兩次調用中刪除_ %%數字%%,因爲我需要這些文件返回到其原始文件名,而沒有它們的數字後綴。除此之外,我只是將兩個重命名分爲單獨的「Rename」和「NameBack」批處理文件,它的工作方式就像一個魅力。謝謝! –

1

你可以準備兩個批處理文件,一個RAW文件重命名爲1.RAW,2.RAW等,以及第二個扭轉這一進程回來。

重命名腳本存儲RAW文件的原始名稱在相應的txt文件:

@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 
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%\*.*" 
相關問題