Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.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
Batch file Windows批处理文件以删除除少数文件夹以外的所有文件夹_Batch File_Cmd - Fatal编程技术网

Batch file Windows批处理文件以删除除少数文件夹以外的所有文件夹

Batch file Windows批处理文件以删除除少数文件夹以外的所有文件夹,batch-file,cmd,Batch File,Cmd,我正在编写一个.bat脚本来删除所有文件夹,但大约有五个预设文件夹。我所做的是创建一个对每个文件夹进行寻址的for循环,然后forloop通过IF语句检查文件夹名称是否与字符串匹配,在这种情况下,它使用GOTO转到RD命令下面的行,从而跳过删除操作 但是,这将结束for循环,这意味着在删除第一个异常之前,每个文件夹都是如此 有没有更好的方法来实现我想要的,或者对我的脚本进行了调整 @echo off echo Starting... for /d %%i in ("C:\demo\*") do

我正在编写一个.bat脚本来删除所有文件夹,但大约有五个预设文件夹。我所做的是创建一个对每个文件夹进行寻址的for循环,然后forloop通过IF语句检查文件夹名称是否与字符串匹配,在这种情况下,它使用GOTO转到RD命令下面的行,从而跳过删除操作

但是,这将结束for循环,这意味着在删除第一个异常之前,每个文件夹都是如此

有没有更好的方法来实现我想要的,或者对我的脚本进行了调整

@echo off
echo Starting...
for /d %%i in ("C:\demo\*") do (
    if "%%i" == "C:\demo\mark" goto skipdel
    if "%%i" == "C:\demo\pjotr" goto skipdel
    if "%%i" == "C:\demo\jasper" goto skipdel
    rd /s /q %%i
    echo Deleted
    :skipdel
)
echo Done.
pause
未经测试

@echo off
echo Starting...
for /d %%i in ("C:\demo\*") do (
    if not "%%i" == "C:\demo\mark" if not "%%i" == "C:\demo\pjotr"  if not "%%i" == "C:\demo\jasper" (
      rd /s /q %%i
      echo Deleted
    )

)

该命令的转到存在。您可以使用连续的IFs在bat中模拟和调节。您还可以使用一个或多个内部FOR循环遍历要跳过的文件夹。

您可以使用正则表达式及其与“|”选项的组合来查找文件夹并删除内容。 使用这种方法,您只需在正则表达式部分[0-9a-z]中添加/删除字符串,将来就可以使用Ex-use正则表达式[mark | pjotr | jasper]。

以下是方法:

FOR /f "tokens=*" %%G IN ('dir "c:\demo" /b /ad ^| findstr /i "^[0-9a-z][^/]*$"' ) DO ( 

REM Efficeint way to delete files and folder. Remove nul if you want verbose output

del /f/s/q "c:\demo\%%G\*.*" > nul
rmdir /s/q "c:\demo\%%G"  > nul

)

goto中断了上下文的连接。不要忘记,这在路径有空格的系统文件中无法工作。。。如果您有类似于“C:/ProgramFiles(86x)/…”的路径,则必须使用:for/d%%i in('type“C:\demo*”)do(