我有一个脚本,我正在用于各种各样的事情,包括重命名和重新打包漫画。其他人也使用此脚本的变体。
然而,我一直看到重新打包漫画的局限性;我发现有些漫画在他们的页面上没有前导零,这使得页面看起来乱序。所以,我添加了一个应该添加前导零的部分。
该文件执行以下操作:
不知何故,它没有正确地重命名文件,并且存档的名称在存档中显示为子文件夹。例如: 让我们重新打包'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\7-Zip\7z.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\7-Zip\7z.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
答案 0 :(得分:1)
是的,问题出在CharSequence
和cd C:\TMPPACKDIR\%%~nI\
之间的代码部分。您正在尝试设置pause
变量引用for
,但这不起作用。您需要使用普通的环境变量,例如%%N
;您只能使用常规环境变量进行子字符串扩展(如代码中的NAME
)。此外,由于您在一个代码块中设置和读取相同的环境变量,因此您需要使用delayed expansion;否则,您将始终收到读取整个块时的值。
代码部分应如下所示:
~-2
答案 1 :(得分:0)
我删除了一些不必要的东西并进行了一些更改,(主要错误是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%\7-Zip\7z.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%\7-Zip\7z.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"
,而不是稍后重命名。