[20220329]批量修改檔名.txt

lfree發表於2022-03-28

[20220329]批量修改檔名.txt

--//工作需要需要修改檔名,例子如下:

D:\tmp\xxx>dir /b
0001.aaa
0001.bbb
0001.ccc
0001.d d

--//前面的0001重新編號,使用0001,0002,0003,0004代替.在windows下操作有一點難度,測試看看.

D:\tmp\xxx>dir /b | sed -e "s+^+mv \"+" -e "s+$+\"+
mv "0001.aaa"
mv "0001.bbb"
mv "0001.ccc"
mv "0001.d d"

D:\tmp\xxx>dir /b | sed -e "s+^0001+\"@+" -e "s+$+\"+
"@.aaa"
"@.bbb"
"@.ccc"
"@.d d"

--//有點奇怪的是sed在windows下最後不能重定向到檔案.
D:\tmp\xxx>dir /b | sed -e "s+^0001+\"@+" -e "s+$+\"+ > a1.txt
sed: -e expression #2, char 8: Unknown option to 's'
--//少寫一個引號".昏前面少寫引號也能通過.
dir /b | sed -e "s+^0001+\"@+" -e "s+$+\"+" > a1.txt

--//建立如下文字:
mv "0001.aaa" "@.aaa"
mv "0001.bbb" "@.bbb"
mv "0001.ccc" "@.ccc"
mv "0001.d d" "@.d d"

--//在vim下執行,注意要安裝Increment外掛.
:%Inc s1 i1 w4 f0

--//執行後變成如下:
mv "0001.aaa" "0001.aaa"
mv "0001.bbb" "0002.bbb"
mv "0001.ccc" "0003.ccc"
mv "0001.d d" "0004.d d"

--//然後執行它就ok了.

D:\tmp\xxx>a1
D:\tmp\xxx>mv "0001.aaa" "0001.aaa"
mv: `0001.aaa' and `0001.aaa' are the same file

D:\tmp\xxx>mv "0001.bbb" "0002.bbb"
D:\tmp\xxx>mv "0001.ccc" "0003.ccc"
D:\tmp\xxx>mv "0001.d d" "0004.d d"

--//windows下還有什麼簡單的方法呢.
--//在windows執行如下:
D:\tmp\xxx>dir /b | xargs -iQ echo mv  Q Q
 0001.aaaaa
 0002.bbbbb
 0003.ccccc
 0004.d d d
--//什麼這樣.奇怪.在一行完成有一些困難.

D:\tmp\xxx>for /F "delims=="  %i in ('dir /b 0001.*') do @echo mv  "%i" "%i" | sed "s/0001/@/2"
mv  "0001.aaa" "@.aaa"
mv  "0001.bbb" "@.bbb"
mv  "0001.ccc" "@.ccc"
mv  "0001.d d" "@.d d"
--//在vim下執行,注意要安裝Increment外掛.
:%Inc s1 i1 w4 f0

--//linux下如下執行呢?感覺差不多,放棄測試.
--//再看看前面使用xargs 什麼回事.哦想起來了,回車換行問題,這是windwows的文字的預設模式..
--//要給檔名加入引號,再次看到windows的變態模式,一定要寫成如下,我自己都看不明白^_^.

D:\tmp\xxx>dir /b | xargs -iQ echo -e  mv "\""""""Q\""""""" "\""""""Q\""""""" | tr -d "\r"
mv "0001.aaa" "0001.aaa"
mv "0001.bbb" "0001.bbb"
mv "0001.ccc" "0001.ccc"
mv "0001.d d" "0001.d d"
mv "0001eee" "0001eee"

--//實際上相當於傳入的引數時0001.aaa\r,在開始處理刪除\r字元更加合理方便一些.
D:\tmp\xxx>dir /b | tr -d "\r" | xargs -iQ echo -e  "mv \""""""Q\""""""" \"""""""Q\"""""""
mv "0001.aaa" "0001.aaa"
mv "0001.bbb" "0001.bbb"
mv "0001.ccc" "0001.ccc"
mv "0001.d d" "0001.d d"
mv "0001eee" "0001eee"

--//簡單一點就是沒輸出雙引號,你就再加一個雙引號直到出現為止.

總結:
--//再次提醒自己以後給注意windows下xargs -iQ 接受的引數帶有\r字元。

--//其它情況通過管道接收的字串也要注意這個問題。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/267265/viewspace-2884440/,如需轉載,請註明出處,否則將追究法律責任。

相關文章