Batch file “批处理文件”以重命名文件夹中的文件,然后重试

Batch file “批处理文件”以重命名文件夹中的文件,然后重试,batch-file,batch-processing,Batch File,Batch Processing,恐怕这是一个有点过时的问题,但这里有: 我有一个程序,它可以按顺序生成一些.RAW文件,例如 示例_1.原始 示例2.RAW 然后根据需要将额外的有效数字添加到数字中,例如 示例_10.原始 示例200.RAW 我需要将这些文件名转换为数字,以便通过批处理程序运行,然后生成更多文件作为输出。我编写了一个批处理文件,用于重命名,并将新旧文件名存储在文本文件中,我的代码是: @echo off set i=1 echo Running Batch Rename for %%f in (*.RAW)

恐怕这是一个有点过时的问题,但这里有:

我有一个程序,它可以按顺序生成一些.RAW文件,例如

示例_1.原始
示例2.RAW

然后根据需要将额外的有效数字添加到数字中,例如

示例_10.原始
示例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
然后将所有my.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等?

这应该可以完成这项工作

@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.RAW、2.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
重命名回退脚本使用该信息恢复所有相应文件的名称:

@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

通过使用“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%\*.*"

你介意用n个txt文件代替n个原始文件吗?如果没有,可以将原始原始原始文件名存储在txt文件中,其名称与原始文件的新名称对应,例如,将示例_1.raw存储在1.txt文件中,并将示例_1.raw重命名为1.raw。另一批将迭代txt文件,找到相应的原始文件,并将其重命名为previous name.Helbreder-虽然可能不是最漂亮的解决方案,但这肯定是一个选项,我可以在完成后处理后删除n个文本文件。我假定原始代码只需修改即可将文件名回显到%I%.txt。有没有关于反向代码的线索?这不是问题。有一些工具可以从文件名中删除扩展名。我将准备一个答案:)完美!我所做的唯一更改是在最后两次调用中删除了u%%number%%,因为我需要将文件恢复为原始文件名,而不带数字后缀。除此之外,我只是将这两个重命名拆分为单独的“Rename”和“NameBack”批处理文件,它就像一个符咒。谢谢