我必须每天在文件夹中运行一个批处理文件,以从文件名中删除时间戳。每当我运行它时,我有一个批处理文件来修剪文件名中的最后9个字符。
如果文件名是**Current Enrolled Members East 2015-01-31-14-01-01**
并且我今天运行批处理文件,它会修剪时间戳,文件名变为Current Enrolled Members East 2015-01-31
。但是如果我再次运行批处理文件,那么它会再次修剪最后九个字符。我只是希望我的批处理文件仅在其中有时间戳时修剪文件名。具有新日期和时间戳的日常文件进入该文件夹。我在文件夹中有三种文件名
“当前注册会员东部”,“当前注册会员西部”和“当前注册会员中间”
为了在日期之后没有时间戳的情况下不重命名文件,我使用了下面的脚本。它不起作用。请指教。
查找第4个分隔符为' - ',如果存在,则调用rename else not not。
dir /b | find "xlsx" /i > temp.log
set tempvar=
for /f "tokens=1-2 delims=." /f %%A in (temp.log) do (
for /f "tokens=4 delims=-" /f %%Z in (%%A) do
rename_file.bat %%A %%B
)
del temp.log
rename_file.bat
set fName=%1
set extn=%2
ren %fName%.%extn% %fName:~0,-9%.%extn%
答案 0 :(得分:1)
由于您最初没有向我们提供任何示例,因此任何回复都是猜测。
我试试
if "%filename:~40%" neq "" call yourbatchfiletotrimthelast10charactersfromthefilename
鉴于您的文件名 - 您还没有告诉我们该名称是包含在变量还是元变量中。
我得出结论,您的批处理通过将名称分配给普通环境变量并删除不需要的部分(可能使用延迟扩展)来删除最后九个字符。没有代码,这是一个猜测。
鉴于提供的格式,我建议使用
来重命名for /f "tokens=4delims=-" %%z in ("!currentfilename!") do call yourrenamebatch
如果currentfilename
的内容至少包含3 - ,则只会执行您提及的批次。
答案 1 :(得分:1)
由于您的文件名是常量,但最后的时间信息除外,您可以使用一个只有4行的非常简单的批处理文件:
@echo off
if exist "Current Enrolled Members East ????-??-??-??-??-??" ren "Current Enrolled Members East ????-??-??-??-??-??" "Current Enrolled Members East ????-??-??"
if exist "Current Enrolled Members West ????-??-??-??-??-??" ren "Current Enrolled Members West ????-??-??-??-??-??" "Current Enrolled Members West ????-??-??"
if exist "Current Enrolled Members Middle ????-??-??-??-??-??" ren "Current Enrolled Members Middle ????-??-??-??-??-??" "Current Enrolled Members Middle ????-??-??"
答案 2 :(得分:1)
不需要批处理文件 - 只需要一个REN命令!
ren "* ????-??-??-??-??-??" "* ????-??-??"
请参阅How does the Windows RENAME command interpret wildcards?,了解其工作原理。
注意 - 以上可能会重命名不应该的文件。例如:
"some description abcd-ef-gh-ij-kl-m" --> "some description abcd-ef-gh"
显然,上面没有时间戳,但它与REN源掩码匹配。但你不太可能担心这些名字。
万一你遇到并发症,你可以在面具上添加20,然后在本世纪剩下的时间里它会更精确和更好(虽然还不是防弹):
ren "* 20??-??-??-??-??-??" "* ????-??-??"
或者您可以获得我JREN.BAT utility的副本,并通过正则表达式对掩码非常精确:
jren "(.* 20\d\d-[01]\d-[0123]\d)-[012]\d-[012345]\d-[012345]\d" $1
如果将命令放在批处理脚本中,请使用CALL JREN
。
JREN.BAT是一个混合JScript /批处理脚本,可以在XP以后的任何Windows机器上本机运行。