【发布时间】:2013-06-25 09:58:49
【问题描述】:
我有一系列文件需要每天重命名。我收到的文件格式如下: yyyyMMdd_hhmmss_xxx.someFileName.txt 我需要去掉中间的时间戳以及文件名前面的三位数字字段,并留下日期和“someFileName.txt”部分。生成的文件名应如下所示:yyyyMMddsomeFileName.txt
我对 bat 文件一无所知,我做了一些实验:
@setlocal EnableDelayedExpansion
@for %%i in (.\*.txt) do call rename %%i
:rename
@set dateString=%%i:~0,8%
@set nameString=%%i:~20%
@set combinedString=%dateString%%nameString%
@echo %combinedString%
显然,这实际上并没有重命名任何东西。它只是应该打印组合字符串输出。我收到语法错误:“命令的语法不正确 ~0,8 ~20”
这里发生了什么?正确的方法是什么?
【问题讨论】:
-
您必须
call :rename(注意:冒号)才能使用您定义的标签。 -
此外,不幸的是,语法有很多很多错误。第一个问题是批处理没有 HLL 意义上的过程概念,并且直接通过
:rename之类的标签收费。在FOR语句之后,您需要一个GOTO :EOF才能到达文件末尾。rename是一个糟糕的选择,因为它是一个批处理关键字。在以前称为rename的例程中,%%i是脱离上下文的。因为它是xrename例程的第一个参数,所以它是例程中的%1。您不能子字符串元变量(%%i,%1等) - 您只能子字符串普通环境变量。 -
不完全符合您的要求,但如果您可以使用像 yyyyMMdd.someFileName.txt 这样的名称,那么您只需要
ren *_*_*.*.txt ????????.*
标签: windows for-loop batch-file rename