我有一个带有一堆.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 "pages\%%~nA.md" del "%%A"
因为它只搜索特定的"页面"文件夹,而不是它的所有子目录。
编辑添加:我已广泛搜索网站,并且我知道/ S通常用于搜索子目录,但在&#34之后简单地添加它并不起作用;如果不存在"。例如,这会出错:
for %%A in (buildfiles\source\*.rst) do if not exist "pages\%%~nA.md" /S del "%%A"
如何获得"如果不存在"部分在子目录中搜索?
答案 0 :(得分:0)
方法-1 :只需1个命令行:
for %%A in (buildfiles\source\*.rst) do (msr -rp pages -l -f "%%~nA.md" && del "%%A")
msr -rp xxx
&& del xxx
表示not found
(return = %ERRORLEVEL%
= 0)也可以 delete
msr.exe
添加> nul
的输出,例如:msr -rp pages -l -f "%%~nxA.md" >nul
方法-2 :4行:如果您使用!ERRORLEVEL!
%ERRORLEVEL%
代替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工具,在我的开放项目https://github.com/qualiu/msr tools
目录中没有依赖项。文档是内置的,只需运行它;或者从上面的链接或https://qualiu.github.io/msr/usage-by-running/msr-Windows.html获取。
(如果您的Windows是x86 / 32位计算机,请使用msr-Win32.exe
。)
添加更快速的方法 :(对page
中的每个rst
文件扫描buildfiles\source
以上两种方法
已添加nin.exe
,该地址与msr.exe
位于同一位置;递归搜索buildfiles\source
和pages
仅一次,通过3个命令管道(2 msr.exe
+ 1 nin.exe
命令)。
方法-3 :生成命令(-o "del xxx"
)并执行del
(-X
),您可以预览生成的del
没有-X
的命令;隐藏-X -PAC
的一些输出:
msr -rp buildfiles\source,pages -l -f "\.(rst|md)$" -PIC | nin nul "([^\\/]+)\.(rst|md)$" -updAC | msr -x buildfiles\source -t "^1\D.*?:\s*(.+)\s*$" -o "del \"$1\"" -X
方法-4 :获取文件列表并删除:(需要在|
循环中将每个管道^|
转义为for
,这是为什么我更喜欢-X
喜欢方法-3 来处理简单的情况)
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*$" -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 buildfiles\source -t "^1\D.*?:\s*(.+)\s*$" -o "$1"
来获取孤立.rst
文件(1次匹配)。