写一个bat将当前文件夹下非文件夹的文件名修改为创建时间,如果时间重复在后面加上序号,并且每个步骤加上10毫秒的延时,完成后需要点击确认
时间: 2023-06-25 20:05:40 浏览: 187
以下是实现该功能的bat脚本:
```
@echo off
setlocal enabledelayedexpansion
REM 获取当前时间,用于检查重名文件
for /f "usebackq delims=" %%a in (`wmic os get LocalDateTime ^| findstr ^[0-9]`) do set datetime=%%a
REM 将当前文件夹下非文件夹的文件重命名为创建时间
for %%f in (*) do (
if not "%%~df"=="%cd%" (
set "filename=%%~nf"
set "extension=%%~xf"
set "fullpath=%%~dpnxf"
if not "%%~af"=="d" (
set "creationtime=%%~tf"
set "creationtime=!creationtime::=!"
set "creationtime=!creationtime:.=!"
set "newfilename=!creationtime!!extension!"
set "counter=1"
:checkname
if exist "!newfilename!" (
set "newfilename=!creationtime!_!counter!!extension!"
set /a "counter+=1"
goto checkname
)
echo Renaming "!filename!!extension!" to "!newfilename!"...
ren "!filename!!extension!" "!newfilename!"
ping -n 1 -w 10 localhost > nul
)
)
)
REM 等待用户确认
echo Done!
pause
```
解释一下代码:
1. `@echo off` 表示关闭命令行窗口中的回显。
2. `setlocal enabledelayedexpansion` 表示启用延迟环境变量扩展,在后面的代码中用到了 `!` 符号来获取变量的值。
3. `for /f "usebackq delims=" %%a in (`wmic os get LocalDateTime ^| findstr ^[0-9]`) do set datetime=%%a` 使用 WMIC 命令获取当前时间,并将结果保存在 `datetime` 变量中。
4. `for %%f in (*) do ...` 遍历当前文件夹下的所有文件,对于非文件夹的文件执行以下操作:
1. `set "filename=%%~nf"` 和 `set "extension=%%~xf"` 获取文件名和扩展名。
2. `set "fullpath=%%~dpnxf"` 获取文件全路径。
3. `if not "%%~af"=="d" (...` 判断是否为文件,如果是文件则执行以下操作:
1. `set "creationtime=%%~tf"` 获取文件创建时间。
2. `set "creationtime=!creationtime::=!"` 和 `set "creationtime=!creationtime:.=!"` 去掉时间字符串中的冒号和点号。
3. `set "newfilename=!creationtime!!extension!"` 构造新文件名。
4. `if exist "!newfilename!" (...` 判断是否存在重名文件,如果存在则在文件名后面加上 `_序号` 直到文件名不重复。
5. `ren "!filename!!extension!" "!newfilename!"` 将原文件名改为新文件名。
6. `ping -n 1 -w 10 localhost > nul` 进行10毫秒的延时。
5. `echo Done!` 输出提示信息。
6. `pause` 等待用户按下任意键确认。
请注意:此脚本可能会覆盖已存在的文件,请在执行前备份重要文件。
阅读全文