写一个bat将当前文件夹下所有图片和视频文件的文件名修改为对应文件的创建时间,如果时间重复在后面加上序号,并且每个步骤加上0.1s的延时,同时防止获取不到文件出现异常
时间: 2023-09-10 11:05:33 浏览: 125
根据文件名创建文件件,将文件移动到对应的文件夹中
### 回答1:
@echo off
setlocal enabledelayedexpansion
REM 遍历当前文件夹下的所有文件
for /f "delims=" %%f in ('dir /b /a-d *.*') do (
echo 处理文件: %%f
REM 获取文件创建时间
set "filetime="
for /f "usebackq delims=" %%d in (`wmic datafile where name^=".\%%f" get creationdate ^| findstr /b [0-9]`) do (
set "filetime=%%d"
goto :filetime_found
)
:filetime_found
REM 处理文件名
set "filename=%%~nf"
set "ext=%%~xf"
set "newname=!filetime:~0,4!-!filetime:~4,2!-!filetime:~6,2!_!filetime:~8,2!-!filetime:~10,2!-!filetime:~12,2!!ext!"
REM 检查是否存在同名文件
set "i=1"
:check_next
if exist "!newname!" (
set "newname=!filetime:~0,4!-!filetime:~4,2!-!filetime:~6,2!_!filetime:~8,2!-!filetime:~10,2!-!filetime:~12,2!_!i!!ext!"
set /a i+=1
goto :check_next
)
REM 重命名文件
echo 重命名为: !newname!
ren "%%f" "!newname!"
REM 延时0.1s
ping -n 1 -w 1000 127.0.0.1 >nul
)
echo 处理完成!
pause >nul
### 回答2:
以下是一个批处理脚本,实现了将当前文件夹下所有图片和视频文件的文件名修改为对应文件的创建时间,并且如果时间重复,则在后面加上序号。同时,增加了0.1秒的延时来防止获取不到文件出现异常。
```bat
@echo off
setlocal enabledelayedexpansion
:: 设置延时时间(单位:毫秒)
set delay=100
:: 遍历当前文件夹下的所有文件
for %%A in (*) do (
:: 检查文件是否是图片或视频文件
for /F "tokens=1 delims=." %%B in ("%%~xA") do (
if /I "%%B"=="jpg" (
call :renameFile "%%A"
) else if /I "%%B"=="png" (
call :renameFile "%%A"
) else if /I "%%B"=="mp4" (
call :renameFile "%%A"
)
)
:: 延时0.1s
ping -n 1 -w %delay% 127.0.0.1 >nul
)
goto :eof
:renameFile
:: 获取文件的创建时间
for %%C in ("%~1") do set "ctime=%%~tC"
:: 判断文件的创建时间是否已经存在
if defined name_!ctime! (
:: 获取已存在的序号
set /a count=!name_!ctime!+1
:: 修改文件名
ren "%~1" "!ctime!_!count!_%%~nx1"
:: 更新已存在的序号
set "name_!ctime!=!count!"
) else (
:: 修改文件名
ren "%~1" "!ctime!_%%~nx1"
:: 记录文件的创建时间和序号
set "name_!ctime!=0"
)
goto :eof
```
该脚本遍历文件夹下的所有文件,并以嵌套循环的方式筛选出图片和视频文件。然后,通过获取文件的创建时间来作为新的文件名。如果创建时间重复,就在后面加上序号。在重命名文件之前,增加了0.1秒的延时来防止获取不到文件或者存在其他异常。
注意:将该脚本保存为后缀为`.bat`的文件,并将其放置在需要修改文件名的文件夹中。运行脚本后,会按照上述规则修改文件名。
### 回答3:
以下是一个实现上述要求的bat脚本:
```batch
@echo off
setlocal enabledelayedexpansion
:: 设置延时
ping -n 1 -w 100 > nul
:: 获取当前时间
for /f "tokens=2 delims==" %%a in ('wmic os get LocalDateTime /format:list') do set "datetime=%%a"
set "datetime=%datetime:~0,14%"
:: 遍历当前文件夹下的所有文件
for /r %%i in (*) do (
:: 判断文件是否为图片或视频文件
set "ext=%%~xi"
if "!ext:~1!"=="jpg" goto rename
if "!ext:~1!"=="png" goto rename
if "!ext:~1!"=="bmp" goto rename
if "!ext:~1!"=="gif" goto rename
if "!ext:~1!"=="jpeg" goto rename
if "!ext:~1!"=="mp4" goto rename
if "!ext:~1!"=="mov" goto rename
if "!ext:~1!"=="avi" goto rename
goto next
:: 重命名文件
:rename
:: 获取文件创建时间
for %%j in ("%%i") do set "createdtime=%%~tj"
set "createdtime=%createdtime:~0,14%"
:: 判断创建时间是否与当前时间重复
if exist "!createdtime: =_!%%~ni!ext!" (
set "counter=1"
:loop
set /a "counter+=1"
if exist "!createdtime: =_!%%~ni!_!counter!%%~xi" goto loop
set "newname=!createdtime: =_!%%~ni!_!counter!%%~xi"
) else (
set "newname=!createdtime: =_!%%~ni!%%~xi"
)
:: 重命名文件
ren "%%i" "!newname!"
goto next
:next
:: 延时0.1秒
ping -n 1 -w 100 > nul
)
:: 完成后显示消息
echo 文件重命名完成!
ping -n 3 > nul
```
请将以上内容复制到一个文本文件中,并将其后缀名改为`.bat`,然后将该bat文件放置到你想要重命名文件的文件夹中。运行该bat文件后,它将按要求重命名该文件夹下的所有图片和视频文件。重命名后的文件名格式为`创建时间_文件名`,如果有多个文件在同一时间创建,则会在文件名后面加上序号。
另外,为了确保能正确获取文件的创建时间,我在每个步骤之间都添加了0.1秒的延时,并使用`ping`命令来实现。这样可以让bat脚本更加稳定,防止获取不到文件或发生异常。
阅读全文