2012-12-14 79 views
0

我有和将有文件名为“x_1.txt x_2.txt x_3.txt,...”我的其他程序,我输入这些文件无法识别订单所以它就像这样排序“x_1.txt,x_101.txt,x_2.txt”)。一个解决方案是将文件重命名为x00001.txt,x00002.txt,.... 我到目前为止写了下面的.bat文件,但是我遇到了两个问题,如果你帮我解决,我会很高兴其中:如何使用Windows批处理文件脚本重命名多个文件

1 - 我如何从字符串中删除了“number'.txt x_'number'.txt

2-(解决)我如何使用这个字符串变量重命名文件名(该文件的重命名部分事先不工作!)

cls 
setlocal enabledelayedexpansion 
set /A count=100000 
for %%f in (*.txt) do (
    set /a count+=1 
    set str=!count:~1! 
    echo !str! 
    echo %%f 
    set filename=%%f 
    set filename=!filename:~0,5! /Comment: here I want to just keep the x_ part which I don't know how" 
    echo !filename! 
    set str3=!filname!!str! 
    echo !str3! 
    /// ren %%f !str3!.txt /Comment: Here I cannot use the variable str3, 
    call:renamer %%f !str3! 
) 

:renamer 
ren %1 %2.txt 

感谢

+0

也许最好是修复其他程序。 :) – GolezTrol

+0

@格雷兹,这我知道:),但首先批处理文件是我手中现在唯一的编译器!我可以使用MATLAB,但随后我必须在每次运行MATLAB时都运行matlab 第二,我记得我小时候在DOS下安装程序时,他们使用批处理文件来创建一个可以完成所有任务的非常好的程序。我有一天会向我自我承诺我会学习它!需要学习它的时间:D – Nabi

+0

我通过在文件末尾添加对子例程的调用来修复第二个问题,我正在更新帖子 – Nabi

回答

1

如果满足以下条件:

  • 您希望将所有.txt文件重命名的在当前文件夹
  • 所有.txt文件的具有完全相同的名称的一个_,立即数
  • 没有您的文件名中包含!

然后下面的工作

@echo off 
setlocal enableDelayedExpansion 
for %%F in (*.txt) do for /f "tokens=1,2 delims=_." %%A in ("%%F") do (
    set num=0000%%B 
    ren "%%F" "%%A!num:~-5!.txt" 
) 

但是要消除这些条件需要更复杂的代码。

下面是一个强大的解决方案,应该正确地重命名所有符合模板的文件。

  • 它允许多个_这个名字。
  • 它只重命名名称以_NNN.txt结尾的文件,其中NNN是数字
  • 它正确处理文件名中的!

请注意,它不会正确处理超过99999的数字。扩展0填充度很简单。

@echo off 
setlocal disableDelayedExpansion 
pushd . 
subst #: . 
#: 
for /f "eol=: delims=" %%F in ('dir /b /a-d *.txt^|findstr /er "_[0-9]*.txt"') do (
    set "name=%%~nF" 
    setlocal enableDelayedExpansion 
    for /f "eol=: delims=" %%A in ("!name:_=\x!") do (
    endlocal 
    set "file=%%F" 
    set "name=%%~pA" 
    set "num=%%~nA" 
    setlocal enableDelayedExpansion 
    set "num=0000!num:~1!" 
    set "name=!name:~1,-1!" 
    ren "!file!" "!name:\x=_!!num:~-5!.txt" 
    endlocal 
) 
) 
popd 
subst /d #: 
+0

非常感谢,我相信这个Bat文件的力量:)我了解第二个代码(J/k :-))。但是如果您有时间可以解释参数%% B的设置位置,那么我无法在第一个代码中使用标记, ? – Nabi

+0

好吧,我知道了%% B是第二个标记 – Nabi