首页 > 自动化运维 > 应用服务器 > [20220329]批量修改文件名.txt
[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博客 ” ,链接:https://blog.itpub.net/267265/viewspace-2884440/ ,如需转载,请注明出处,否则将追究法律责任。