2015-04-27 69 views
1
@echo off 
for %%a in (*.xhtml) do (

ren "%%~fa" "epub_%%~nxa" 
) 

我正在使用代碼將文本(「epub_」)插入到所有文件名中。如何使用批處理腳本在文件名前面插入文本

文件名是

00_Cover_Page.xhtml 
01_Halftitle.xhtml 
02_Title.xhtml 
03_Copyright.xhtml 
04_Dedication.xhtml 
05_Preface.xhtml 
06_Contents.xhtml 

它重命名不錯,除了 「00_Cover_Page.xhtml

epub_epub_00_Cover_Page.xhtml( 「epub_」 僅在文件名中插入兩次)

epub_01_Halftitle.xhtml 
epub_02_Title.xhtml 
epub_03_Copyright.xhtml 
epub_04_Dedication.xhtml 
epub_05_Preface.xhtml 
epub_06_Contents.xhtml 

如何它可能發生?

+0

的*「如何」 *可以找到[這裏](http://stackoverflow.com/a/19705611/2861476) –

+0

@MCND - 那是你的「爲什麼失敗」的答案。 jeb對相同問題的回答解釋瞭如何解決這個問題。 – dbenham

+0

@dbenham,是的,傑布的答案相同鏈接的問題給出瞭解決方案,並在這裏user1016274的解決方案給出了另一個,但我不回答這個問題的稱號(串插入),只包括在內,因爲最後一行在評論OP的問題是*「怎麼會發生?」*。下次我會更精確。謝謝 –

回答

0

如MC ND的評論中指出,該行爲的說明,可在https://stackoverflow.com/a/19705611/1012053。 FOR循環僅緩衝目錄的一部分,當它返回到磁盤讀取其他文件條目時,它可以拾取已重命名的文件。

jeb's answer on that same question解釋瞭如何通過使用FOR/F循環處理DIR/B命令來避免該問題 - 在迭代開始之前,全部捕獲DIR/B命令的輸出。

@echo off 
for /f "eol=: delims=" %%F in ('dir /b /a-d *.xhtml') do ren "%%F" "epub_%%~nxa" 

另一種方法是使用我的JREN.BAT regular expression renaming utility。 JREN.BAT是純粹的腳本(混合JScript /批處理),它可以從XP以後的任何Windows機器上本機運行。

jren "^" "epub_" /fm *.xhtml 

如果將該命令放入批處理腳本中,請使用CALL JREN。

0

不知何故,FOR循環拿起已重命名的文件。在一部開拓創新的文件名,如果可能的

  1. 過濾器:您可以在(至少)2種方法避免這種

    for %A in (0*.xhtml) do @ren "%~nxA" "epub_%~nxA"

  2. 事先創建一個文件名列表和循環使用:

    set tmpfile=files%RANDOM%.tmp
    dir /b *.xhtml > %tmpfile%
    for /f %A in (%tmpfile%) do @ren "%~nxA" "epub_%~nxA"
    del %tmpfile%
    set tmpfile=

相關問題