批量添加前导零文件名
batch add leading zeroes filename
我有一个脚本可以用于各种用途,包括重命名和重新包装漫画。此脚本的变体也被其他人使用。
不过,我发现重新包装漫画存在局限性;我发现有些漫画的页面没有前导零,这使得页面看起来乱七八糟。所以,我添加了一个应该添加前导零的部分。
该文件执行以下操作:
- 遍历当前文件夹的所有子文件夹
- 将漫画档案重命名为适当的扩展名(这样我就可以看到它在哪里)
- 遍历所有档案,并将它们解压到一个临时文件夹
- 遍历临时文件夹中的所有文件,并添加前导零
- 将其重新打包为 7zip
- 将文件重命名为漫画扩展名
不知何故,它没有正确重命名文件,并且存档的名称显示为存档中的子文件夹。例如:
让我们重新打包 'testfolder',其中包含从 1 到 100 的图像。它再次重命名、提取、打包和重命名,没有问题。但是,新存档在图像旁边的存档中包含名为 'testfolder' 的文件夹,这些文件夹没有前导零。我不确定发生了什么,而且我已经为此奋斗了一段时间,所以我想把它放到网上(无论如何,这是一个很好的脚本来分享)。有人知道这里出了什么问题吗?
@ECHO ON
rem mode con: cols=80 lines=60
for /f "delims=" %%F in ('dir /ad/s/b') do (
cd %%F
IF EXIST *.cbr (
RENAME *.cbr *.rar
)
IF EXIST *.cbz (
RENAME *.cbz *.zip
)
IF EXIST *.cb7 (
RENAME *.cb7 *.7z
)
FOR %%I IN (*.RAR, *.ZIP *.7Z) DO (
ECHO Extracting %%I...
"C:\Program Files-Zipz.exe" e "%%I" -oC:\TMPPACKDIR\* -y | FIND /V "ing "
echo %%~nI
cd C:\TMPPACKDIR\%%~nI\
FOR /f "delims=" %%P IN ('dir *.JPG, *.PNG, *.BMP') DO (
SET %%N = %%P
SET %%N = 00%%N
SET %%N = %%N:~-2%
echo %%P
echo %%N
pause
rename 'C:\TMPPACKDIR\%%~nI\%%P' %%N
)
pause
echo %%F
cd %%F
ECHO Repacking
"C:\Program Files-Zipz.exe" a -t7z "%%~nI.7z" "C:\TMPPACKDIR\%%~nI*" -mx=9 | FIND /V "ing "
IF %ERRORLEVEL% EQU 0 RD /S /Q C:\TMPPACKDIR
ECHO Renaming new file
RENAME *.7z *.CB7
ECHO Removing original file
DEL "%%I"
ECHO File %%I is done
)
)
REM del /f/q "%~0" | exit
是的,问题出在cd C:\TMPPACKDIR\%%~nI\
和pause
之间的代码部分。您正在尝试设置一个 for
变量引用 %%N
,但它不起作用。您需要改用普通环境变量,例如 NAME
;您只能使用普通环境变量进行子字符串扩展(如代码中的 ~-2
)。此外,由于您在单个代码块中设置和读取相同的环境变量,因此需要使用 delayed expansion;否则,当整个块被读取时,您将始终收到存在的值。
代码部分应如下所示:
cd /D "C:\TMPPACKDIR\%%~nI"
for /F "delims=" %%P in ('dir /B *.JPG, *.PNG, *.BMP') do (
set "FILE=C:\TMPPACKDIR\%%~nI\%%P"
set "NAME=00%%~nP"
setlocal EnableDelayedExpansion
set "NAME=!NAME:~-2!"
rename "!FILE!" "!NAME!%%~xP"
endlocal
)
pause
我删除了一些不必要的东西并做了一些更改,(主要错误是 aschipfl 已经确定的错误)。
FOR /F "DELIMS=" %%F IN ('DIR/AD/S/B') DO (
PUSHD "%%F"
IF EXIST *.cbr REN *.cbr *.rar
IF EXIST *.cbz REN *.cbz *.zip
IF EXIST *.cb7 REN *.cb7 *.7z
FOR %%I IN (*.RAR, *.ZIP *.7Z) DO (
ECHO Extracting %%I...
"%ProgramFiles%-Zipz.exe" e "%%I" -o"C:\TMPPACKDIR\*" -y
PUSHD "C:\TMPPACKDIR\%%~nI"
FOR %%P IN (*.JPG, *.PNG, *.BMP) DO (
SET "_N=100%%~nP"
SETLOCAL ENABLEDELAYEDEXPANSION
SET "_N=!_N:~-2!"
REN "%%P" "!_N!%%~xP"
ENDLOCAL
)
POPD
ECHO Repacking
"%ProgramFiles%-Zipz.exe" a -t7z "%%~nI.7z" "C:\TMPPACKDIR\%%~nI*" -mx=9
IF NOT ERRORLEVEL 1 RD/S/Q "C:\TMPPACKDIR\%%~nI"
ECHO Renaming new file
REN "%%~nI.7z" "%%~nI.CB7"
ECHO Removing original file
DEL "%%I"
ECHO File %%I is done
)
POPD
)
需要研究的事项:
能否 7z.exe
不先直接提取 .cbr、.cbz 和 .cb7 而不先重命名它们。同理,提供文件类型后重新打包时,-t7z
可不可以不直接给文件取名"%%~nI.CB7"
,以后再重命名。
我有一个脚本可以用于各种用途,包括重命名和重新包装漫画。此脚本的变体也被其他人使用。
不过,我发现重新包装漫画存在局限性;我发现有些漫画的页面没有前导零,这使得页面看起来乱七八糟。所以,我添加了一个应该添加前导零的部分。
该文件执行以下操作:
- 遍历当前文件夹的所有子文件夹
- 将漫画档案重命名为适当的扩展名(这样我就可以看到它在哪里)
- 遍历所有档案,并将它们解压到一个临时文件夹
- 遍历临时文件夹中的所有文件,并添加前导零
- 将其重新打包为 7zip
- 将文件重命名为漫画扩展名
不知何故,它没有正确重命名文件,并且存档的名称显示为存档中的子文件夹。例如: 让我们重新打包 'testfolder',其中包含从 1 到 100 的图像。它再次重命名、提取、打包和重命名,没有问题。但是,新存档在图像旁边的存档中包含名为 'testfolder' 的文件夹,这些文件夹没有前导零。我不确定发生了什么,而且我已经为此奋斗了一段时间,所以我想把它放到网上(无论如何,这是一个很好的脚本来分享)。有人知道这里出了什么问题吗?
@ECHO ON
rem mode con: cols=80 lines=60
for /f "delims=" %%F in ('dir /ad/s/b') do (
cd %%F
IF EXIST *.cbr (
RENAME *.cbr *.rar
)
IF EXIST *.cbz (
RENAME *.cbz *.zip
)
IF EXIST *.cb7 (
RENAME *.cb7 *.7z
)
FOR %%I IN (*.RAR, *.ZIP *.7Z) DO (
ECHO Extracting %%I...
"C:\Program Files-Zipz.exe" e "%%I" -oC:\TMPPACKDIR\* -y | FIND /V "ing "
echo %%~nI
cd C:\TMPPACKDIR\%%~nI\
FOR /f "delims=" %%P IN ('dir *.JPG, *.PNG, *.BMP') DO (
SET %%N = %%P
SET %%N = 00%%N
SET %%N = %%N:~-2%
echo %%P
echo %%N
pause
rename 'C:\TMPPACKDIR\%%~nI\%%P' %%N
)
pause
echo %%F
cd %%F
ECHO Repacking
"C:\Program Files-Zipz.exe" a -t7z "%%~nI.7z" "C:\TMPPACKDIR\%%~nI*" -mx=9 | FIND /V "ing "
IF %ERRORLEVEL% EQU 0 RD /S /Q C:\TMPPACKDIR
ECHO Renaming new file
RENAME *.7z *.CB7
ECHO Removing original file
DEL "%%I"
ECHO File %%I is done
)
)
REM del /f/q "%~0" | exit
是的,问题出在cd C:\TMPPACKDIR\%%~nI\
和pause
之间的代码部分。您正在尝试设置一个 for
变量引用 %%N
,但它不起作用。您需要改用普通环境变量,例如 NAME
;您只能使用普通环境变量进行子字符串扩展(如代码中的 ~-2
)。此外,由于您在单个代码块中设置和读取相同的环境变量,因此需要使用 delayed expansion;否则,当整个块被读取时,您将始终收到存在的值。
代码部分应如下所示:
cd /D "C:\TMPPACKDIR\%%~nI"
for /F "delims=" %%P in ('dir /B *.JPG, *.PNG, *.BMP') do (
set "FILE=C:\TMPPACKDIR\%%~nI\%%P"
set "NAME=00%%~nP"
setlocal EnableDelayedExpansion
set "NAME=!NAME:~-2!"
rename "!FILE!" "!NAME!%%~xP"
endlocal
)
pause
我删除了一些不必要的东西并做了一些更改,(主要错误是 aschipfl 已经确定的错误)。
FOR /F "DELIMS=" %%F IN ('DIR/AD/S/B') DO (
PUSHD "%%F"
IF EXIST *.cbr REN *.cbr *.rar
IF EXIST *.cbz REN *.cbz *.zip
IF EXIST *.cb7 REN *.cb7 *.7z
FOR %%I IN (*.RAR, *.ZIP *.7Z) DO (
ECHO Extracting %%I...
"%ProgramFiles%-Zipz.exe" e "%%I" -o"C:\TMPPACKDIR\*" -y
PUSHD "C:\TMPPACKDIR\%%~nI"
FOR %%P IN (*.JPG, *.PNG, *.BMP) DO (
SET "_N=100%%~nP"
SETLOCAL ENABLEDELAYEDEXPANSION
SET "_N=!_N:~-2!"
REN "%%P" "!_N!%%~xP"
ENDLOCAL
)
POPD
ECHO Repacking
"%ProgramFiles%-Zipz.exe" a -t7z "%%~nI.7z" "C:\TMPPACKDIR\%%~nI*" -mx=9
IF NOT ERRORLEVEL 1 RD/S/Q "C:\TMPPACKDIR\%%~nI"
ECHO Renaming new file
REN "%%~nI.7z" "%%~nI.CB7"
ECHO Removing original file
DEL "%%I"
ECHO File %%I is done
)
POPD
)
需要研究的事项:
能否 7z.exe
不先直接提取 .cbr、.cbz 和 .cb7 而不先重命名它们。同理,提供文件类型后重新打包时,-t7z
可不可以不直接给文件取名"%%~nI.CB7"
,以后再重命名。