在Windows 10中批量重命名目录(删除后缀)

在Windows 10中批量重命名目录(删除后缀)

我一直在尝试理解 Windows 批处理脚本,但其语法与现代编程语言有很大不同,我根本无法实现我想要的功能。我也尝试过谷歌搜索,并检查了 SO/SU,但无济于事。

我在另一个文件夹(“C:\Users\me\Desktop\Delete”)中有大量文件夹,这些文件夹是下载的网页内容。格式为:

thisIsTheWebPageName_files
thisIsTheWebPageName.html

我想在批处理文件(注意:标准 CMD .bat 文件 - 不是 PowerShell)中遍历所有文件夹,通过简单地删除“_files”后缀来重命名它们,然后删除关联的 .html 文件。我相信专家可以在一行中完成此操作 - 有人可以帮忙吗?

答案1

迭代所有文件或目录:

for %%i in (*.html) do ...

for /d %%i in (*_files) do ...

注意:在 .bat 脚本中,您必须使用%%迭代器变量,而交互式 shell 仅使用一个%

删除文件扩展名(仅适用于迭代器,不适用于变量):

%~ni, %~xi

for %%f in (*.html) do echo %%~nf_files

替换子字符串(仅适用于命名变量,不适用于迭代器):

%var:old=new%

ren "%dir%" "%dir:_files=%"

切分字符串(仅适用于命名变量):

%var:~begin,end%

ren "%dir%" "%dir:~0,-6%"

遍历所有文件夹,通过删除“_files”后缀重命名它们,然后删除关联的 .html 文件

for在同一个循环中同时做两件事可能的,但命名变量的使用却相当烦人,因为它们是在读取时扩展的,而不是在调用时。(我们需要命名变量来删除“_files”后缀。)

调用子程序可能会更容易:

for /d %%d in (*_files) do call :tidy "%%~d"
goto :eof

:tidy
set "dirname=%~1"
echo Would run: ren "%dirname%" "%dirname:~0,-6%"
echo Would run: del "%dirname:~0,-6%.html"
goto :eof

但是如果每个*.html文件都有相应的 _files 目录,反之亦然,那么您可以迭代这些文件:

for %%i in (*.html) do echo ren "%%~ni_files" "%%~ni" && echo del "%%~i"

(我思考按照此处的预期进行工作&&。我可能会分两步进行。

for %%i in (*.html) do echo ren "%%~ni_files" "%%~ni"
del *.html

相关内容