一段时间以来,我一直在试图解决这个问题,并且一直在互联网上进行搜索,但我仍找不到正确的答案。 所以这是我的问题:
我想创建一个批处理文件,该文件将搜索某个目录的所有子文件夹,找到一个特定的文件,然后删除搜索文件所在文件夹中除该文件以外的所有文件。
到目前为止,我想到的是:
cmd /k for /f %%a IN ('dir /b /s Neuer') do if not [%%a] == [index.txt] del /q %%a
但是,这只会删除每个子文件夹中的每个文件-并不是我想要的。
有人可以帮忙吗?
答案 0 :(得分:0)
@echo off
setlocal
if "%~2" == "" (
echo/Usage: %~nx0 ^<directory^> ^<file^>
echo/
echo/%~nx0 will search the given ^<directory^> and its subdirectories
echo/looking for ^<file^>. If the ^<file^> is found, then all the other
echo/files and subdirectories in the same directory as ^<file^> will be
echo/deleted. If more than one ^<file^> is found then this action is
echo/repeated for all matches. Wildcards are not accepted; ^<file^> can
echo/be the name of either a file or a directory.
exit /b
)
if not exist "%~1\" (
echo/%nx0: "%~1" does not exist or is not a directory
exit /b
)
set "TARGETNAME=%~2"
for /r "%~1" %%t in (*) do call :checkFile "%%~t"
for /r "%~1" %%t in (.) do call :checkDir "%%~t"
exit /b
:checkFile
if not "%~nx1" == "%TARGETNAME%" exit /b
echo/* Found "%~1"
echo/ - Deleting files in directory "%~dp1" . . .
for %%f in ("%~dp1*") do call :delFile "%%f"
echo/ - Deleting directories in directory "%~dp1" . . .
for /d %%d in ("%~dp1*") do call :delDir "%%d"
exit /b
:checkDir
set "TESTNAME=%~1"
call :checkFile "%TESTNAME:~0,-2%"
exit /b
:delFile
if "%~nx1" == "%TARGETNAME%" exit /b
echo/ : del "%~1"
rem del "%~1"
exit /b
:delDir
if "%~nx1" == "%TARGETNAME%" exit /b
echo/ : rd /q /s "%~1"
rem rd /q /s "%~1"
exit /b
注意:
在生产中,当然可以进行一些错误检查。
也许某些文件无法删除,因为它们具有只读属性,或者运行脚本的用户没有适当的特权,或者它们正在使用中,等等。
出于某些类似原因,或者由于它们包含隐藏文件,或者因为它们包含无法删除的文件,可能无法删除某些目录。
脚本会查找具有给定名称的文件和目录;很容易看出如何将搜索限制为仅文件。
该脚本将对与给定名称匹配的所有文件或目录执行其工作。
如此处所示,脚本实际上并没有删除任何内容,它只是打印将要删除的内容。要使其真正执行删除操作,只需删除rem
和del
前面的rd
。
答案 1 :(得分:0)
正是出于这种问题,已经发明了命令forfiles
: