2012-06-19 119 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%\*.*" 
相关问题