批量如何重命名保存到变量中的文件?
问题描述:
这是我的情况:批量如何重命名保存到变量中的文件?
@echo off
Setlocal EnableDelayedExpansion
set file=C:\Users\test\Desktop\fscls.cfg
我怎么可以重命名文件%%变量来获得(与echo命令):
C:\Users\test\Desktop\TIMESTAMP_fscls.cfg
答
的%time%
环境变量中包含时间戳。
:: Remove colons from %time%
set ts=%time::=%
:: Remove centiseconds from %ts%
set ts=%ts:~0,-3%
:: file=HHMMSS_file
set file=%ts%_%file%
如果您需要时间戳包括日期,你可以通过类似的方式刮%date%
环境变量得到它。有关更多信息,请参阅DOS String Manipulation上的此页面。
如果您的%file%
变量已经包含了路径,并且您试图在路径和文件名之间插入时间戳,那有点麻烦。您将需要使用for /f
循环或call
子批次进行批次参数替换。
@echo off
setlocal
set file=C:\Users\test\Desktop\fscls.cfg
:: set ds=YYYYMMDDHHMMSS.etc (the result of wmic os get localdatetime)
for /f "tokens=2 delims==" %%I in ('wmic os get localdatetime /format:list') do set ds=%%I
:: set ds=YYYYMMDD
set ds=%ds:~0,8%
:: Insert %ds% into %file%
call :insert "%file%" "%ds%_" file
echo new filename: %file%
:: end main
goto :EOF
:insert <path> <str_to_insert> <varname_to_set>
set "%~3=%~dp1%~2%~nx1"
看到最后几的help for
和help call
页面获取更多信息。
它似乎是一个很好的解决方案,但我想添加一个datestamp(YYYYMMDD),而不是时间戳,对不起。 – rschirin 2013-03-21 16:00:30
确实。那么,正如我在我的答案中的示例脚本中提到的那样,您可以从'%date%'环境变量中删除日期。如果您担心系统区域设置会影响'%date%'变量的格式,您可以从'wmic os get localdatetime'获取与系统无关的日期。你可以使用'for/f'循环捕获'wmic'命令的输出。 'for/f“tokens = 2 delims ==”%% I in('wmic os get localdatetime/format:list')do set datetime = %% I';然后'%datetime:〜0,8%'会给你你正在寻找的YYYYMMDD。 – rojo 2013-03-21 16:06:24
@rschirin - 好的,我修改了第二个脚本以获取datestamp而不是时间戳。请享用。 – rojo 2013-03-21 16:49:22