2014-12-22 44 views
0

我一直試圖在_1之後刪除一些字符並重命名該文件,但卡住了。讓我把示例文件名清楚說明。如何使用批處理在多個文件中的特定字符後刪除字符串?

aero_name_1_3_7.png 
glik_trol_1_5_2_9_5.png 
this_that_1_3_1_9.png 
....... and so on. 

所以我的文件名包含確切的格式,但不同的名稱,因此我認爲使用令牌和分隔符。重命名我的文件後,應該看看aero_name_1.png,glik_trol_1.png,this_that_1.png 這是我寫的一塊蝙蝠,但這不起作用。如果有人可以建議,那會很好。

for /F "tokens=1-4,* delims=_" %%a in ('dir /A-D /B "*.png"') do (
    move "%%a_%%b" "%%a%%~xb" 
) 

感謝

回答

1

看你的第二個文件名,這是什麼FOR/F環有:

%%a=glik 
%%b=trol 
%%c=1 
%%d=5 
%%e=2_9_5.png 

所以你的MOVE命令變爲:

move "glik_trol" "glik" 

注那%%b沒有分機

你可以使用

for /f "tokens=1-3* delims=_" %%a in ('dir /a-d /b *.png') do (
    move "%%a_%%b_%%c_%%d" "%%a_%%b_%%c%%~xd" 
) 

如果你習慣使用正則表達式,那麼你可以使用我的方便JREN.BAT utility - 混合的JScript /批處理腳本通過執行一個正則表達式查找和名稱替換重命名的文件。 JREN.BAT是純粹的腳本,它可以在任何Windows機器上運行,從XP開始。這是一個非常方便的方法來執行非常精確的重命名操作。

假設你在當前目錄下有JREN.BAT,或者更好的是,你的PATH中的某個地方:需要

jren "^([^_]+_[^_]+_[^_]+)_.*(\.png)$" "$1$2" /i 

沒有批。如果確實在批處理腳本中使用該命令,則應該在命令前加上CALL,因爲JREN也是批處理腳本。

+0

感謝您的及時回覆。我最終用你的建議糾正了我的意見。這是我用的:for/f「tokens = 1-4 * delims = _」%% a in('dir/ad/b * .png')do( move「%% a _ %% b _ %% c_ %% d _ %% e「」%% a _ %% b _ %% c %% _ %% d %%〜xe「)我用它來改變看起來像這樣的文件:glik_trol_this_1_2_9_5.png,它從中刪除了s,插入一個%符號。不知道發生了什麼。謝謝 –

+0

@ user2516780如果dbenham的回答很有幫助,請將其標記爲已接受。 [見本頁](http://meta.stackexchange.com/questions/5234/)解釋爲什麼這很重要。 – rojo

+0

我結束了他的修正。但是,謝謝你的投入。幫助了很多!!!! –

1

根據您的要求,「刪除_1後面的一些字符」,似乎最好的解決方案是使用substring substitution。不知道你是否會從中受益,但是這個解決方案將允許在_1之前可變數目的下劃線 - 這與您現在使用的更靜態的"delims=_"不同。

子串替換非常適合剝離零件(例如set "var=%var:*_1=%"),但剝離結束有點棘手。一種方法是將rem推入替代品中。

試試這個:

@echo off 
setlocal 

for %%I in (*.png) do call :ren "%%~I" 

goto :EOF 

:ren <filename> 
set "pngfile=%~1" 
echo "%pngfile%" | find "_1" >NUL || goto :EOF 
set pngfile=%pngfile:_1=&rem.% 
echo ren "%~1" "%pngfile%_1.png" 
+0

@ user2516780請參閱編輯。我添加了一行以跳過不包含'_1'的png文件的重命名。如果你說你需要你的文件以'basename1.png'格式結束,那麼從最後一行刪除下劃線。 – rojo

+0

謝謝!這工作...我也改正了另一個。非常感謝 –

相關問題