批处理获取文件修改日期并批量重命名
请问如何修改以下代码,使得批处理能判断目录下的文件名是否已经以文件修改日期开头,如果是,则退出,如果不是,则执行原代码。@ECHOOFFCOLOR0a::rem用dir命...
请问如何修改以下代码,使得批处理能判断目录下的文件名是否已经以文件修改日期开头,如果是,则退出,如果不是,则执行原代码。
@ECHO OFF
COLOR 0a
::rem 用dir命令列出这个批处理所在有那个文件夹下的所有文件
for /f "tokens=*" %%a in ( 'dir * /s /a /b'
) do (
::rem 判断文件名,如果文件名不等于这个批处理自身的文件名,就做重命名操作
if "%%~a" neq "%~0" (
::rem 因为后面要对变量进行重新编辑,所以要启用延迟环境变量功能
SETLOCAL ENABLEDELAYEDEXPANSION
::rem 用%%~t这个功能来取得文件修改的时间
set newFileName=%%~ta
::rem 取得时间的前10位,再加上原来的文件名
set "newFileName=!newFileName:~0,10!%%~nxa"
::rem 把原来的文件名重命名为 时间+文件名 的方式
ren "%%a" "!newFileName!"
::rem 一个循环结束之后把变量延迟功能关闭,避免内存中留有原来的内容。
ENDLOCAL
)
)
PAUSE 展开
@ECHO OFF
COLOR 0a
::rem 用dir命令列出这个批处理所在有那个文件夹下的所有文件
for /f "tokens=*" %%a in ( 'dir * /s /a /b'
) do (
::rem 判断文件名,如果文件名不等于这个批处理自身的文件名,就做重命名操作
if "%%~a" neq "%~0" (
::rem 因为后面要对变量进行重新编辑,所以要启用延迟环境变量功能
SETLOCAL ENABLEDELAYEDEXPANSION
::rem 用%%~t这个功能来取得文件修改的时间
set newFileName=%%~ta
::rem 取得时间的前10位,再加上原来的文件名
set "newFileName=!newFileName:~0,10!%%~nxa"
::rem 把原来的文件名重命名为 时间+文件名 的方式
ren "%%a" "!newFileName!"
::rem 一个循环结束之后把变量延迟功能关闭,避免内存中留有原来的内容。
ENDLOCAL
)
)
PAUSE 展开
4个回答
展开全部
是的,应该用字符串比较而非数值比较
如:if "a"=="b" 这是字符串比较
if 1 equ 2 这是数值比较
------------------代码如下
@ECHO OFF
COLOR 0a
::rem 用dir命令列出这个批处理所在有那个文件夹下的所有文件
for /f "tokens=*" %%a in ( 'dir * /s /a /b') do (
if not "%%~a" == "%~0" (
SETLOCAL ENABLEDELAYEDEXPANSION
set FileDate=%%~ta
set FileName=%%~nxa
if not "!FileName:~0,10!" == "!FileDate:~0,10!" (
rem 这一句的意思是 如果文件名的前10位 不等于 文件时间的前10位
rem 就做重命名动作
set "NewFileName=!FileDate:~0,10!!FileName!"
ren "%%a" "!NewFileName!"
)
ENDLOCAL
)
)
PAUSE
如:if "a"=="b" 这是字符串比较
if 1 equ 2 这是数值比较
------------------代码如下
@ECHO OFF
COLOR 0a
::rem 用dir命令列出这个批处理所在有那个文件夹下的所有文件
for /f "tokens=*" %%a in ( 'dir * /s /a /b') do (
if not "%%~a" == "%~0" (
SETLOCAL ENABLEDELAYEDEXPANSION
set FileDate=%%~ta
set FileName=%%~nxa
if not "!FileName:~0,10!" == "!FileDate:~0,10!" (
rem 这一句的意思是 如果文件名的前10位 不等于 文件时间的前10位
rem 就做重命名动作
set "NewFileName=!FileDate:~0,10!!FileName!"
ren "%%a" "!NewFileName!"
)
ENDLOCAL
)
)
PAUSE
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
if "%%~a" neq "%~0"
neq 是针对数值进行操作的,你这里的变量实际为字符,应该使用 if "%%~a"=="%~0" 来判断
neq 是针对数值进行操作的,你这里的变量实际为字符,应该使用 if "%%~a"=="%~0" 来判断
追问
这个代码已经可以给文件名添加文件修改日期,但是重复运行该批处理时,目录下的文件名前会多次被添加文件的修改日期。
需要增加一个判断,我是新手,不知道怎么加
追答
就是我前面说的这个原因啊,因为neq 是针对数值进行操作的,你这里的变量实际为字符,也就是说这个判断的结果永远是两个不同,所以程序每判断一次都会添加日期到文件名。应该使用 if "%%~a"=="%~0" 来判断
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
SETLOCAL ENABLEDELAYEDEXPANSION
这个是要做多次循环的 。。。
这个是要做多次循环的 。。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
用 Bulk Rename Utility 吧,功能强大,你的要求可以轻松解决
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询