我需要一個腳本來重命名大量的文件。我有一個文件夾很多。每個文件都由ID命名。然後,我有一個CSV文件是這樣的:重命名大量的文件
OLDID; NEWID
OLDID; NEWID
等等
每一位新老ID是具體的和原始的。我想問一下什麼是最好的方式來做到這一點,或在bash/batch中幫忙。
我需要一個腳本來重命名大量的文件。我有一個文件夾很多。每個文件都由ID命名。然後,我有一個CSV文件是這樣的:重命名大量的文件
OLDID; NEWID
OLDID; NEWID
等等
每一位新老ID是具體的和原始的。我想問一下什麼是最好的方式來做到這一點,或在bash/batch中幫忙。
如果您正在使用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等),那麼這是另一個世界中的另一種動物。
鑑於您的操作系統是一些Unix(如Linux),並且考慮到您自己選擇使用csv文件,所以可能有更簡單的方法:mmv可以一次重命名多個文件,使用模式以匹配原始文件,並允許在目標文件名中使用匹配的字符串。見http://ss64.com/bash/mmv.html。
批處理的解決方案與e0k的bash解決方案非常相似;您一次只讀一行文件,將分隔線分割,然後相應地重命名文件。
for /f "tokens=1,2 delims=;" %%A in (ids.csv) do ren "%%A" "%%B"
這是假定你的ID是在一個叫做ids.csv
爲什麼不使用'ren'%% A「」%% B「'? –
好點。添加。 – SomethingDark
請問您的逗號分隔值(CSV)由分號分開文件值文件? – e0k
它是批次還是批次? Bash被Linux使用,Batch被Windows使用。 – SomethingDark
它正如我寫的。每行==兩個數字用分號分隔。 對於這個項目,我更喜歡批處理。 謝謝! – Cart