如果文件名长度超过某个值,如何有条件地重命名文件?

时间:2015-01-30 18:41:33

标签: batch-file filenames rename

我必须每天在文件夹中运行一个批处理文件,以从文件名中删除时间戳。每当我运行它时,我有一个批处理文件来修剪文件名中的最后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%

3 个答案:

答案 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机器上本机运行。