Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 批处理脚本以删除除“以外的所有文件夹”;以“开始”;_Windows_Batch File_Cmd_Directory_Rmdir - Fatal编程技术网

Windows 批处理脚本以删除除“以外的所有文件夹”;以“开始”;

Windows 批处理脚本以删除除“以外的所有文件夹”;以“开始”;,windows,batch-file,cmd,directory,rmdir,Windows,Batch File,Cmd,Directory,Rmdir,我有一个包含多个子文件夹的文件夹。结构如下: C:\foo C:\foo\web.foo C:\foo\web.bar C:\foo\win.foo C:\foo\win.bar C:\foo\mobile.foo C:\foo\mobile.bar 我有时希望删除包含以下批处理脚本文件的文件夹: rmdir C:\foo/s/q 在这里,完全删除整个文件夹C:\foo并不重要 但是现在我只想删除C:\foo及其包含文件的子文件夹,这些文件不以“web”开头。 您对此有什么好的解决方案吗?

我有一个包含多个子文件夹的文件夹。结构如下:

  • C:\foo
  • C:\foo\web.foo
  • C:\foo\web.bar
  • C:\foo\win.foo
  • C:\foo\win.bar
  • C:\foo\mobile.foo
  • C:\foo\mobile.bar
我有时希望删除包含以下批处理脚本文件的文件夹:

rmdir C:\foo/s/q
在这里,完全删除整个文件夹C:\foo并不重要

但是现在我只想删除C:\foo及其包含文件的子文件夹,这些文件不以“web”开头。


您对此有什么好的解决方案吗?

以下内容可以解决问题,请注意,这是一个使用当前目录的批处理文件:

@echo关闭
对于/F“delims=“%%D in('dir/B/AD^ | findstr/V“^web.”)do(
回音rmdir%%D/s/q
)
如果可以,请删除
rmdir
前面的
echo

由于
/AD
,dir命令只列出目录名,由于
/B
,因此使用简单的名称输出。要在开头搜索,请使用
findstr
/V
。对于否定,请使用
^
。此外,管道符号需要转义
^ |


如果您想要使用参数的动态批处理脚本,可以使用以下命令,通过
batchname.bat“C:\foo”web调用它。
(如果可以,请删除
rmdir
前面的
echo
):

@echo关闭
设置为0
如果[%1]=[]设置“INVARGS=1”
如果[%2]=[]设置“INVARGS=1”
如果%s%==1(
回显%0^^
转到eof
)
设置“文件夹=%1%”
设置“前缀=%2%”
pushd“%folder%”
应删除文件夹的回显列表:
对于/F“delims=“%%D in('dir/B/AD^ | findstr/v“^%prefix%”)do(
回显“%cd%\%%%D”
)
邻苯二胺
:选择
回声。
设置/P“c=是否确实要继续[Y/N]?”
如果/I“%c%”等于“Y”转到“是”
如果/I“%c%”等于“N”转到eof
后藤:选择
:是的
回声。
pushd“%folder%”
对于/F“delims=“%%D in('dir/B/AD^ | findstr/v“^%prefix%”)do(
回音rmdir%%D/s/q
)
邻苯二胺
:eof

以下操作应该可以完成,请注意,这是一个使用当前目录的批处理文件:

@echo关闭
对于/F“delims=“%%D in('dir/B/AD^ | findstr/V“^web.”)do(
回音rmdir%%D/s/q
)
如果可以,请删除
rmdir
前面的
echo

由于
/AD
,dir命令只列出目录名,由于
/B
,因此使用简单的名称输出。要在开头搜索,请使用
findstr
/V
。对于否定,请使用
^
。此外,管道符号需要转义
^ |


如果您想要使用参数的动态批处理脚本,可以使用以下命令,通过
batchname.bat“C:\foo”web调用它。
(如果可以,请删除
rmdir
前面的
echo
):

@echo关闭
设置为0
如果[%1]=[]设置“INVARGS=1”
如果[%2]=[]设置“INVARGS=1”
如果%s%==1(
回显%0^^
转到eof
)
设置“文件夹=%1%”
设置“前缀=%2%”
pushd“%folder%”
应删除文件夹的回显列表:
对于/F“delims=“%%D in('dir/B/AD^ | findstr/v“^%prefix%”)do(
回显“%cd%\%%%D”
)
邻苯二胺
:选择
回声。
设置/P“c=是否确实要继续[Y/N]?”
如果/I“%c%”等于“Y”转到“是”
如果/I“%c%”等于“N”转到eof
后藤:选择
:是的
回声。
pushd“%folder%”
对于/F“delims=“%%D in('dir/B/AD^ | findstr/v“^%prefix%”)do(
回音rmdir%%D/s/q
)
邻苯二胺
:eof

这将删除所有以
web开头的文件。

@echo关闭
setlocal EnableDelayedExpansion
对于('dir/b/s')中的/f%%f,请执行以下操作(
设置“name=%%~nF”
如果/i不是“!名称:~0,4!”==“web”(
rm!名字!
)
)

这将删除所有以
web开头的文件。

@echo关闭
setlocal EnableDelayedExpansion
对于('dir/b/s')中的/f%%f,请执行以下操作(
设置“name=%%~nF”
如果/i不是“!名称:~0,4!”==“web”(
rm!名字!
)
)