2013-07-09 162 views
0

好吧,我敢肯定这是一个小问题,但我希望有人可以提供帮助。Windows批处理文件名称操作

我们正在处理的操作系统是Windows NT 4.0。

我需要做的是创建一个批处理文件,该文件读入文件夹中所有Jounal.x(其中x是大于0且小于32的数字)文件。然后,我需要它以EJ-REG-X.100格式重命名每个文件。

我认为最大的问题是我对DOS的变量语法和正则表达式有点模糊。下面是代码,我已经试过到目前为止

FOR /R %%g IN (C:\testbatch\transfer\Journal.*) DO (set regnum=%%g, ren Journal.* EJ-REG-%regnum%.100) 

让我知道,如果有任何我可以提供更多的信息。谢谢!

回答

3

试试这个:

for /l %%a in (1,1,31) do (
    set "new=00%%a" 
    setlocal enabledelayedexpansion 
    set "new=!new:~-3!" 
    ren "C:\testbatch\transfer\Journal.%%a" "EJ-REG-!new!.100" 
    endlocal 
) 
+0

工程就像一个魅力,感谢一堆!问题是,为了锦上添花,无论如何,我可以在数字上加上前导零?那么Journal.1应该是EJ-REG-001.100,而Journal.10应该是EJ-REJ-010.100? – JesterXIII

+0

是的,请参阅我的编辑。 – Endoro

+0

太棒了。完美的作品。谢谢你的帮助! – JesterXIII

0

的/ R是递归搜索,你不使用它 因此将其删除在循环

%% G和BTW REGNUM包含完整的文件路径

所以开始删除路径和文件名,以保留仅使用%%〜xg 的扩展名,通过这样做,regnum将只包含文件扩展名 因此它将b e:

FOR /R C:\testbatch\ %%g IN (Journal.*) DO (   
set ext = %%~xg 
set ext = %ext:. =% 
ren %%g EJ-REG-%ext%.100) 
+0

'%%〜xg'中还有一个不需要的点,你知道吗? – Endoro

+0

是的你是对的,我编辑我的答案,不能尝试,但它应该工作。 – alexbuisson

+0

对不起,它不能工作。在代码块内部,你需要'延迟扩展'和'!变量!'。 – Endoro