Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.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 使用.bat文件删除除两个文件夹外的所有文件夹_Batch File - Fatal编程技术网

Batch file 使用.bat文件删除除两个文件夹外的所有文件夹

Batch file 使用.bat文件删除除两个文件夹外的所有文件夹,batch-file,Batch File,批量 @echo off set folder="c:\FTP\" set keep="keep1" set keeptwo="keep2" cd /d %folder% for /F "delims=" %%i in ('dir /b') do ( if /i "%%~ni" NEQ %keep% if /i "%%~ni" NEQ %keeptwo% (rmdir "%%i" /s/q || del "%%i" /s/q) ) pause 形势 folder1/file1.

批量

@echo off
set folder="c:\FTP\"
set keep="keep1"
set keeptwo="keep2"

cd /d %folder%

for /F "delims=" %%i in ('dir /b') do (
    if /i "%%~ni" NEQ %keep% if /i "%%~ni" NEQ %keeptwo% (rmdir "%%i" /s/q || del "%%i" /s/q)
)

pause
形势

  • folder1/file1.txt
  • folder2/file1.txt
  • keep1/file1.txt
  • keep2/file1.txt
  • file1.txt
预期结果

我需要保留“keep1”和“keep2”文件夹以及所有包含的文件,但必须删除包含所有子目录和文件的“folder1”、“folder2”和“file1.txt”

当前结果

它删除所有文件夹中的所有文件,删除“folder1”和“folder2”,并保留“keep1”和“keep2”


任何我缺少的线索。

您不能将
/S
选项与
DELETE
命令一起使用,因为这将删除当前目录和所有子目录中的文件

不管怎样,这就是我完成任务的方式,这样您就不会从
RMDIR
命令中得到错误。我使用
IF EXIST
命令来确定它是文件还是目录

@echo off
set "folder=c:\FTP\"
set "keep=keep1"
set "keeptwo=keep2"

cd /d %folder%

for /F "delims=" %%G in ('dir /b') do (
    if /I NOT "%%G"=="%keep%" (
        if /I NOT "%%G"=="%keeptwo%" (
            REM check if it is a directory or file
            IF EXIST "%%G\" (
                rmdir "%%G" /s /q
            ) else (
                del "%%G" /q
            )
        )
    )
)

我假设这就是你想要做的:

@Echo关闭
设置“folder=C:\FTP”
设置“keep=keep1”
设置“keeptwo=keep2”
CD/D“%folder%”2>Nul | |退出/B
Del/F/A/Q*
对于(*)中的/D%%A,如果/I不“%%A”=%keep%%”如果/I不“%%A”=%keep2%”RD/S/Q“%%A”,则执行
暂停

我刚刚尝试了你的代码,但它没有从文件夹keep1和keep2中删除文件,因此它看起来工作正常。你在所有文件夹和根目录中都使用了相同的文件吗?如果我放不同的文件,效果很好。如果我使用相同的文件,它会将它们全部删除。我在所有地方都使用了相同的(空)文件。您不能将
/S
选项与
删除
命令一起使用。这意味着从当前目录和所有子目录中删除该文件。