Batch file 如果具有不同扩展名的对应文件没有';不存在于子目录中
我有一个文件夹和一堆.rst文件,还有一个文件夹和一堆分散在子目录中的.md文件。对于每个.rst文件,我想检查是否有同名的对应.md文件。如果没有相应的.md文件,我想删除.rst文件 以下是我目前掌握的情况:Batch file 如果具有不同扩展名的对应文件没有';不存在于子目录中,batch-file,Batch File,我有一个文件夹和一堆.rst文件,还有一个文件夹和一堆分散在子目录中的.md文件。对于每个.rst文件,我想检查是否有同名的对应.md文件。如果没有相应的.md文件,我想删除.rst文件 以下是我目前掌握的情况: for %%A in (buildfiles\source\*.rst) do if not exist "%%~nA.md" del "%%A" 只要.md文件与批处理文件都在同一目录中,这项功能就可以工作。我搞不懂的是如何让它搜索特定文件夹的所有子目录,以确定相应的.md文件是否
for %%A in (buildfiles\source\*.rst) do if not exist "%%~nA.md" del "%%A"
只要.md文件与批处理文件都在同一目录中,这项功能就可以工作。我搞不懂的是如何让它搜索特定文件夹的所有子目录,以确定相应的.md文件是否不存在。例如,这并不完全符合我的要求:
for %%A in (buildfiles\source\*.rst) do if not exist "pages\%%~nA.md" del "%%A"
因为它只搜索特定的“pages”文件夹,而不是它的所有子目录
编辑添加:我已经广泛搜索了该网站,我知道/S通常用于搜索子目录,但如果只是在“如果不存在”之后加上,它就不起作用了。例如,这会给出一个错误:
for %%A in (buildfiles\source\*.rst) do if not exist "pages\%%~nA.md" /S del "%%A"
如何获取要在子目录中搜索的“如果不存在”部分?方法1:仅1个命令行:
for%%A in(buildfiles\source\*.rst)do(msr-rp pages-l-f“%%~nA.md”和&del“%%A”)
和&msr-rp xxx
表示del xxx
(return=未找到
=0)因此可以%ERRORLEVEL%
删除
- 要隐藏
addmsr.exe的输出
如:>nul
msr-rp pages-l-f“%%~nxA.md”>nul
!错误等级如果使用了SetLocal EnableExtensions EnableDelayedExpansion
for %%A in (buildfiles\source\*.rst) do (
msr -rp pages -l -f "%%~nA.md" >nul
if %ERRORLEVEL% EQU 0 del "%%A"
)
msr.exe
/msr.gcc*
是一个单一的exe工具,在我打开的项目tools
目录中没有依赖项。文档是内置的,只需运行它;或者从上面的链接或
(如果您的windows是x86/32位计算机,请使用msr-Win32.exe
)
添加更多快速方法:(以上两种方法扫描页面
中的每个rst
文件
)
添加了nin.exe
,该文件与msr.exe
位于同一位置;通过3个命令管道(2个msr.exe
+1个nin.exe
命令)递归搜索buildfiles\source
和pages
仅1次
- 方法3:生成命令(
)并执行-o“del xxx”
(通过del
),您可以预览生成的-X
命令,而无需del
;通过-X
隐藏一些输出:-X-PAC
msr-rp buildfiles\source,pages-l-f“\(rst \\\/]+)\(rst \\/]+)\(rst \\/]+)”-updAC | msr-x buildfiles\source-t“^1\D.*:\s*(.+)\s*”-o“del”$1'-x
- 方法4:获取文件列表并删除:(需要将
循环中的每个管道
转义到
,这就是为什么我更喜欢^
类似方法3的简单情况)-X
for/f“tokens=*”%%a in('msr-rp buildfiles\source,pages-l-f“\(rst | md)$”-PIC^ nin nul”([^\/]+)\(rst | md)$”-updAC^ msr-x buildfiles\source-t“^1\D.*:\s*(.s*)\s*$-o”$1)-PAC)do del a
您也可以使用
msr-x.rst“-t“^1\D.*:\s*(.+)\s*$”-o“$1”
或msr-t“^1\D.*:\s*(.+\.rst)\s*$-o“$1”
而不是msr-x构建文件\source-t“^1\D.*:\s*(.+)\s*$”-o“$1”
,以获得孤立的For%%A in(buildfiles\source\*.rst)do(dir/s/b“pages\%%~nA.md”2>nul | | del“%%A”)
,但很抱歉我在vacaion上回复得太晚了。我想你可能找到了正确的解决办法。