我想通过批处理文件添加文件大小来重命名目录中的所有文件。例如,大小为 66kb 的 apple.bmp 更改为 apple[66KB].bmp。这是我正在尝试的代码
> SET count=1 SET foldersize=0 FOR /f "tokens=*" %%F IN ('dir /s/b > %folder%') DO (call :calcAccSize "%%F") echo %filesize% GOTO :eof > > :calcAccSize REM echo %count%:%1 REM set /a count+=1 set /a > foldersize+=%~z1 > > ren %1 %~nx1[%~z1].mp4 GOTO :eof > > @pause
[编辑/]
假设实际代码:
SET count=1
SET foldersize=0
FOR /f "tokens=*" %%F IN ('dir /s/b %folder%') DO (
call :calcAccSize "%%F"
)
echo %filesize%
GOTO :eof
:calcAccSize
REM echo %count%:%1
REM set /a count+=1
set /a foldersize+=%~z1
ren %1 %~nx1[%~z1].mp4
GOTO :eof
@pause
以下批处理文件重命名当前目录中的所有文件,并在文件扩展名后附加
[xKB]
,除了
[xKB]
的文件。代码是:
@echo off
setlocal EnableExtensions DisableDelayedExpansion
for /F "eol=| delims=" %%I in ('dir /A-D /B 2^>nul ^| %SystemRoot%\System32\findstr.exe /R /V "\[[0123456789][0123456789]*KB\]"') do if not "%%~fI" == "%~f0" (
set /A FileSizeKB=%%~zI / 1024
set "NameFile=%%I"
if not "%%~nI" == "" (
set "FileName=%%~nI"
set "FileExt=%%~xI"
) else (
set "FileName=%%I"
set "FileExt="
)
setlocal EnableDelayedExpansion
ren "!NameFile!" "!FileName![!FileSizeKB!KB]!FileExt!"
endlocal
)
endlocal
文件的文件名中可以包含空格或这些字符
&()[]{}^=;!'+,`~
之一。该代码还可以正确地重命名以点开头且没有更多点的文件,即名称类似于 .Test File!
的文件。
算术表达式仅适用于文件大小小于 2.147.483.648 字节的文件,即小于 2 GiB,因为 Windows 命令处理器
cmd.exe
仅支持使用值范围为 - 的 32 位有符号整数的算术表达式2147483648 至 2147483647(−231 至 231−1)。
要了解所使用的命令及其工作原理,请打开命令提示符窗口,执行以下命令,并完整、仔细地阅读每个命令显示的帮助页面。
call /?
... 解释 %~f0
... 带有完整路径的批处理文件名。dir /?
echo /?
endlocal /?
findstr /?
for /?
if /?
ren /?
set /?
setlocal /?
阅读有关 使用命令重定向运算符的 Microsoft 文档,了解
2>nul
和 |
的说明。重定向运算符 >
和 |
必须在 FOR命令行上使用脱字符号
^
进行转义,以便在 Windows 命令解释器在执行命令 FOR(执行嵌入的 )之前处理此命令行时将其解释为文字字符dir
命令行,使用 findstr
在后台启动单独的命令进程,将输出文件名列表重定向到 %ComSpec% /c
,并将 '
中的命令行作为附加参数附加。