cmd批量重命名子文件夹/文件
问题描述:
如何批量重命名包含子文件夹和文件的文件夹A中的文件,格式名为filename_ex.doc,并使它们看起来像filename.doc?cmd批量重命名子文件夹/文件
我一直在尝试做一段时间,这是一个史诗般的失败。请帮忙。
答
我认为你还想重命名子文件夹中的文件,这也是你对马丁詹姆斯的第二条评论中的方向有问题的地方。我猜你用DIR/S选项试过了这个代码。但是你非常接近:-)你只需要使用2个循环!
编辑 - 固定代码一旦输出相貌端正,降ECHO,使其功能。
@echo off
for /r %%D in (.) do (
pushd "%%~fD"
for /f "tokens=1-3 delims=_." %%A in ('dir /b *_ex.ext 2^>nul') do echo ren "%%A_%%B.%%C" "%%A.%%C"
popd
)
以上将工作,只要每个文件名没有比出现在_ex.ext
任何_
或.
等。路径中的字符不应该是任何问题,只是文件名是一个问题。
下面是一个更强大的解决方案,应该可以处理任何文件名(unicode名称除外)。它也快得多。它使用子字符串操作,并且必须知道要从名称中删除的字符数。在你的例子中它是3个字符。再次,删除ECHO一旦结果命令看起来正确。
@echo off
setlocal disableDelayedExpansion
for /f "delims=" %%F in ('dir /b /s *_ex.ext') do (
set "old=%%F"
set "new=%%~nF"
setlocal enableDelayedExpansion
echo ren "!old!" "!new:~0,-3!.ext"
endlocal
)
@MartinJames每当我试图一批“编程”,我失败了如此巨大,我永远会期间发布任何代码片段我公司开发的这些步骤;-) – 2012-04-24 07:28:56
我已经试过FOR/F, FOR/D所有这些东西,并从这里阅读文件:[链接](http://ss64.com/nt/for.html)。目前为止没有像样的结果...... :(我真的很讨厌windows批量编程。 – Alex 2012-04-24 08:05:16
@MartinJames:也尝试从命令行:'for“tokens = 1-3 delims = _”。%a('dir * _ex.ext ')做回声%a_%b。%c' ...这是得到卡住,如果我有文件夹/子文件夹或其他文件包含字符的路径:“。”和“_” – Alex 2012-04-24 08:15:54