我一直在尝试理解 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