2016-01-23 46 views
-3

我需要一個腳本來重命名大量的文件。我有一個文件夾很多。每個文件都由ID命名。然後,我有一個CSV文件是這樣的:重命名大量的文件

OLDID; NEWID

OLDID; NEWID

等等

每一位新老ID是具體的和原始的。我想問一下什麼是最好的方式來做到這一點,或在bash/batch中幫忙。

+0

請問您的逗號分隔值(CSV)由分號分開文件值文件? – e0k

+0

它是批次還是批次? Bash被Linux使用,Batch被Windows使用。 – SomethingDark

+0

它正如我寫的。每行==兩個數字用分號分隔。 對於這個項目,我更喜歡批處理。 謝謝! – Cart

回答

0

如果您正在使用bash(在Linux,UNIX等世界中使用的shell),您可以使用以下基於this內部字段分隔符回答的簡短腳本。這假設您使用分號(;)作爲「CSV」文件的分隔符,並且只有一個這樣的分隔符。

#!/bin/bash 

while IFS=';' read -ra names; do 
    mv "${names[0]}" "${names[1]}"; 
done < translation.csv 

其中translation.csv是包含名稱的翻譯與oldname;newname格式的文件。

如果您要改爲文件(即Windows,DOS等),那麼這是另一個世界中的另一種動物。

0

鑑於您的操作系統是一些Unix(如Linux),並且考慮到您自己選擇使用csv文件,所以可能有更簡單的方法:mmv可以一次重命名多個文件,使用模式以匹配原始文件,並允許在目標文件名中使用匹配的字符串。見http://ss64.com/bash/mmv.html

4

批處理的解決方案與e0k的bash解決方案非常相似;您一次只讀一行文件,將分隔線分割,然後相應地重命名文件。

for /f "tokens=1,2 delims=;" %%A in (ids.csv) do ren "%%A" "%%B" 

這是假定你的ID是在一個叫做ids.csv

+1

爲什麼不使用'ren'%% A「」%% B「'? –

+1

好點。添加。 – SomethingDark