如何将批处理文件自身排除在重命名之外
如何将批处理文件自身排除在重命名之外
以下情景:
我写了一个批处理脚本,它会在文件名中添加日期时间戳。文件夹中有很多不同类型的文件。
@echo off for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do set "dt=%%a" set "YY=%dt:~2,2%" & set "YYYY=%dt:~0,4%" & set "MM=%dt:~4,2%" & set "DD=%dt:~6,2%" set "datestamp=%YYYY%-%MM%-%DD%_" :: 根据ISO 8601命名 pause for %%i in (*.*) do ren %%i %datestamp%%%i*
有没有一种好的方法来排除批处理文件本身的重命名?如果有一种方法可以排除所有的.bat文件,那就足够好了。
如何排除批处理文件本身的重命名
在批处理文件中,有时候需要对文件进行重命名操作。然而,如果不排除批处理文件本身,那么批处理文件也会被重命名,这显然是不希望出现的情况。下面给出了解决这个问题的原因和方法。
原因:
问题的原因是批处理文件本身也会被重命名。这是因为在重命名操作中没有排除批处理文件本身,导致批处理文件也被重命名。
解决方法:
为了排除批处理文件本身的重命名,可以使用以下方法:
1. 在REN语句中,不需要使用尾部的*
。这个*
字符并没有起到任何作用,可以去掉。
2. 在对文件名进行重命名之前,应该使用引号将文件名括起来。这样可以避免文件名中包含空格时出现的问题。
3. 使用DIR /B命令获取文件列表,并将其通过管道传递给FINDSTR /V命令。这样可以得到一个除了运行脚本以外的文件列表。
4. 使用%~nx0
获取运行脚本的文件名和扩展名。
5. 使用FOR /F命令来捕获和处理文件列表。
下面是具体的代码示例:
for /f "eol=: delims=" %%F in ('dir /b /a-d ^| findstr /vixc:"%~nx0"') do ren "%%F" "%datestamp%%%F"
通过以上方法,可以排除批处理文件本身的重命名,只对其他文件进行重命名操作。