写一个bat将当前文件夹下非文件夹的文件名修改为文件名后面加上创建时间,
时间: 2023-06-25 19:06:08 浏览: 202
可以使用以下的批处理命令来实现:
```
@echo off
for %%f in (*) do (
if not %%~df == %cd% (
set "datetime="
for /f "usebackq delims=" %%a in (`wmic datafile where "name='%%f'" get creationdate ^| findstr /r "^[0-9]"`) do set "datetime=%%a"
if defined datetime (
set "filename=%%~nf_!datetime:~0,4!!datetime:~4,2!!datetime:~6,2!_!datetime:~8,2!!datetime:~10,2!!datetime:~12,2!%%~xf"
ren "%%f" "!filename!"
)
)
)
```
上面的代码会循环当前文件夹下的所有文件,排除文件夹,并为每个文件名添加创建时间。具体地,它会使用 WMIC 命令获取文件的创建时间,然后将其格式化为“YYYYMMDD_HHMMSS”的形式,并将其添加到文件名的末尾。最后,使用 ren 命令将原始文件名更改为新的文件名。请注意,此脚本仅在 Windows 系统上运行。
相关问题
写一个bat将当前文件夹下非文件夹的文件名修改为创建时间,如果时间重复在后面加上序号
### 回答1:
这是一个实现你要求的BAT文件,请注意备份你的文件夹,以免操作错误造成数据丢失。
```bat
@echo off
setlocal EnableDelayedExpansion
rem 遍历当前文件夹下所有非文件夹文件
for /f "tokens=*" %%a in ('dir /b /a-d') do (
rem 获取文件创建时间
for /f "tokens=1-6 delims=/: " %%b in ("%%~ta") do (
set "datetime=%%d-%%b-%%c_%%e%%f"
)
rem 判断是否有重名文件
if exist "!datetime!-%%a" (
set "index=1"
:check_name
if exist "!datetime!-%%~na_!index!%%~xa" (
set /a "index+=1"
goto check_name
)
set "new_name=!datetime!-%%~na_!index!%%~xa"
) else (
set "new_name=!datetime!-%%a"
)
rem 重命名文件
ren "%%a" "!new_name!"
)
```
该BAT文件的实现思路是循环遍历当前文件夹下所有非文件夹文件,获取每个文件的创建时间,然后将文件名修改为创建时间,如果有重名文件则在创建时间后面加上序号。
注意:该BAT文件会修改当前文件夹下所有非文件夹文件的文件名,请谨慎使用。
### 回答2:
要实现这个功能,可以使用批处理脚本来实现。
首先,需要使用如下的命令获取当前文件夹下非文件夹的文件列表,并遍历每一个文件:
```bat
@echo off
for %%F in (*) do (
if not "%%~aF"=="d" (
REM 在这里执行文件重命名操作
)
)
```
在上述代码中,`%%F`表示当前遍历到的文件名。`%%~aF`表示获取文件属性,`"d"`表示目录,所以`if not "%%~aF"=="d"`表示当前遍历到的不是文件夹。
然后,可以使用如下的命令来获取文件的创建日期时间:
```bat
for /F "usebackq %%D in ('%~tF') do (
REM 在这里获取并处理日期时间
)
```
在上述代码中,`%~tF`表示获取文件的时间戳。`for /F "usebackq %%D in ('%~tF')`表示使用`%%D`来接收获取到的时间戳。
最后,可以使用如下的命令来执行文件重命名操作,将文件名修改为创建时间,并在后面加上序号:
```bat
setlocal enabledelayedexpansion
for /F "usebackq %%D in ('%~tF') do (
set "counter=1"
set "newName=%%~nF_%%~xD"
:loop
if exist "!newName!" (
set /a "counter+=1"
set "newName=%%~nF_!counter!_%%~xD"
goto loop
)
ren "%%F" "!newName!"
)
endlocal
```
在上述代码中,`setlocal enabledelayedexpansion`和`endlocal`命令用于启用和禁用延迟变量展开。`set "counter=1"`表示将序号计数器设置为1。`set "newName=%%~nF_%%~xD"`表示将新的文件名设为原文件名加上时间戳和序号。使用`:loop`和`goto loop`语句实现重复加序号的逻辑。`ren "%%F" "!newName!"`表示使用`ren`命令将原文件名修改为新的文件名。
经过以上的代码处理,即可实现将当前文件夹下非文件夹的文件名修改为创建时间,并在重复时间的文件名后加上序号的功能。
注意:在实际使用时,请将上述代码保存为.bat文件,在所需的文件夹下双击运行即可实现文件重命名操作。
### 回答3:
可以使用以下的批处理脚本来实现将当前文件夹下非文件夹的文件名修改为创建时间,如果时间重复则在后面加上序号:
```
@echo off
setlocal enabledelayedexpansion
set count=1
for /f "delims=" %%a in ('dir /b /a-d') do (
set "name=%%a"
set "ext=!name:~-4!"
set "datestring=%%~ta"
set "year=!datestring:~0,4!"
set "month=!datestring:~5,2!"
set "day=!datestring:~8,2!"
set "time=!datestring:~11,2!"
set "minute=!datestring:~14,2!"
set "second=!datestring:~17,2!"
set "newname=!year!!month!!day!!time!!minute!!second!!ext!"
if not "!name!"=="!newname!" (
if exist "!newname!" (
set "newname=!year!!month!!day!!time!!minute!!second!_!count!!ext!"
set /a count+=1
)
ren "%%a" "!newname!"
)
)
endlocal
```
这个脚本的思路是使用`dir`命令获取当前文件夹下的非文件夹文件列表,然后逐个遍历文件。对于每个文件,首先从创建时间获取年、月、日、时、分、秒的信息,然后将这些信息按照指定的格式拼接在一起,并添加上原始文件的扩展名,作为新的文件名。如果新的文件名已经存在,则在文件名后面添加一个序号。
注意:这个脚本假设文件名的长度不超过260个字符,使用24小时格式的时间,并且不处理带有特殊字符的文件名。如果有特殊要求,可以相应地对脚本进行修改。
写一个bat将当前文件夹下非文件夹的文件名修改为创建时间,如果时间重复在后面加上序号,并且每个步骤加上0.1s的延时
@echo off
setlocal enabledelayedexpansion
set "counter=0"
for %%a in (*) do (
if not "%%~a"=="%~nx0" (
set "filename=%%~na"
set "ext=%%~xa"
set "datestring=%%~ta"
set "datestring=!datestring: =_!"
set "datestring=!datestring::=-!"
set "newname=!filename!_!datestring!!ext!"
if exist "!newname!" (
set /a "counter+=1"
set "newname=!filename!_!datestring!_!counter!!ext!"
)
echo Renaming "%%a" to "!newname!"
timeout /t 1 /nobreak > nul
ren "%%a" "!newname!"
timeout /t 0.1 > nul
)
)
echo Done.
timeout /t 2 > nul
```
将以上命令保存为一个后缀名为 .bat 的文件,放到想要修改文件名的文件夹中运行即可。
阅读全文