2012-12-14 78 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