2016-12-01 66 views
0

我有一個看起來像文件:重命名文件值

1989_Footer.gif 
1989_Header.gif 
260273_Footer.gif 
260273_Header.gif 
... 

,我有一個CSV,看起來像這樣:

1989;10773387 
260273;10776516 
... 

我想用一個重命名的文件數在CSV中給出。 CSV中的第一個數字是舊數字,第二個數字(分號後)是新數字。下劃線之後,如何在不觸及文字的情況下實現該功能?

我想過要獲取文件名,然後搜索CSV中的數字,並用分號後的同一行中的值替換它。

回答

1

JREN.BAT regular expression renaming utility可以簡化的解決方案。 JREN.BAT是純粹的腳本(混合批處理/ JScript),可以從任何Windows機器上運行,從XP開始 - 不需要第三方exe文件。可以通過命令行通過jren /?jren /??獲得完整的文檔以獲取分頁幫助。

從批處理腳本中:

@echo off 
for /f "delims=; tokens=1,2" %%A in (rename.csv) do call jren "^%%A_" "%%B_" /fm *.gif 

在命令行:

for /f "delims=; tokens=1,2" %A in (rename.csv) do @jren "^%A_" "%B_" /fm *.gif 
+0

另一個偉大的答案。從來沒有聽說過杰倫。但是這個工具真的很棒。我會勉強我們這個,因爲有時我有數字背後的字母。這個腳本比Magoo的腳本更容易改變。謝謝! –

2
@ECHO OFF 
SETLOCAL 
SET "sourcedir=U:\sourcedir" 
SET "filename1=%sourcedir%\q40908252.txt" 
FOR /f "usebackqtokens=1*delims=;" %%a IN ("%filename1%") DO (
FOR /f "tokens=1*delims=_" %%r IN ('dir /b /a-d "%sourcedir%\%%a_*"') DO (
    ECHO(REN "%sourcedir%\%%r_%%s" "%%b_%%s" 
) 
) 

GOTO :EOF 

您需要更改sourcedir的設置以適合您的情況。

我用了一個名爲q40908252.txt的文件來存放我的測試數據。

爲了測試目的,所需的REN命令僅僅是ECHO驗證命令是否正確後,將ECHO(REN更改爲REN以實際重命名文件。

讀取csv文件,使用;作爲分隔符,將起始前綴放在%%a中,將前綴放在%%b中。

_執行名爲「%% A_ 什麼」源目錄中的文件的目錄列表,tokenise使得第一令牌(必須是%%a)去%%r,其餘-的名稱來%%s ,然後重命名切換前綴的文件。

假定該文件名的第一個_永遠不會成爲一個多重_

+1

這是連續兩個!我正要發佈一個幾乎相同的答案:-) – dbenham

+0

哇,非常感謝這麼多的解釋 - 工作就像一個魅力:) –

+0

Damnit ...剛剛完成我的,但你的看起來方式更緊湊...我哭了一個約32個嵌套循環和2個更多的獨立循環中...我想更多的實踐會做這項工作:) – geisterfurz007

0

我可能會那樣做(見解釋性說明rem):

@echo off 
setlocal EnableExtensions DisableDelayedExpansion 

rem // Define constants here: 
set "_CSV=%~dpn0.csv" & rem // (path to the CSV file holding the old and new numbers) 
set "_LOC=%~dp0"  & rem // (path to the directory containing the files to rename) 
set "_PAT=*.gif"  & rem // (pattern of the file name part after the first `_`) 

rem // Walk through the CSV file line by line and read old and new numbers: 
for /F "usebackq tokens=1-2 delims=,;" %%K in ("%_CSV%") do (
    rem // Search files whose names begin with the old number and an `_`: 
    for /F "delims=" %%F in ('dir /B /A:-D "%_LOC%\%%K_%_PAT%"') do (
     rem // Store current file name into variable: 
     set "NAME=%%F" 
     rem // Toggle delayed expansion to not lose any `!` in the file name: 
     setlocal EnableDelayedExpansion 
     rem // Rename current file by replacing the old number by the new one: 
     ECHO ren "%_LOC%\!NAME!" "%%L_!NAME:*_=!" 
     endlocal 
    ) 
) 

endlocal 
exit /B 

刪除大寫ECHO命令後r已成功測試腳本!

該方法的優點是,即使在第一個_之後的文件名部分也以_開頭的情況下,它仍然可以工作;所以文件名1989__some_name.gif將被重命名爲10773387__some_name.gif,因此連續兩個__都被維護。