使用批处理脚本删除子文件夹中的文件

时间:2012-12-10 12:03:49

标签: batch-file

我必须从具有相同名称的子文件夹中删除文件。我的文件路径如下所示。

d:\test\test1\archive\*.txt
d:\test\try\archive\*.txt
d:\test\model\archive\*.txt

我尝试在批处理脚本中使用del命令进行删除。 但是文件夹“ test ”中有超过100个文件夹。因此,对每条路径使用del非常困难。

除“archive”文件夹的父文件夹名称外,所有路径的所有内容都保持不变。所以我想可能有一些简单的方法可以使用批处理脚本删除文件。

有人可以指导我是否有使用批处理脚本删除文件的简单方法?或者我必须为所有100个文件夹重复del

5 个答案:

答案 0 :(得分:27)

您也可以使用/s的{​​{1}}开关删除子文件夹。

实施例

del

将删除所有正在测试的文件,包括所有子文件夹中的所有文件。

要删除使用del D:\test\*.* /s 的文件夹,请应用相同的开关。

rd

rd D:\test\folder /s /q 不支持通配符rd,但如果要递归删除*目录下的所有子文件夹,可以使用test循环。

for

如果您在批处理文件中使用for /r /d D:\test %a in (*) do rd %a /s /q 选项,请记住使用2 for而不是1。

答案 1 :(得分:5)

在bat文件中使用powershell

PowerShell Remove-Item c:\scripts\* -include *.txt -exclude *test* -force -recurse

您也可以排除删除某些特定文件夹或文件:

PowerShell Remove-Item C:/*  -Exclude WINDOWS,autoexec.bat -force -recurse

答案 2 :(得分:2)

已移出已关闭的主题

del /s d:\test\archive*.txt

这可以为您提供所有文本文件

可替换地,

我修改了一个我已写过的脚本来查找某些文件来移动它们,这个应该去找文件并删除它们。它允许您通过选择屏幕选择哪个文件夹。

请在使用之前在您的系统上进行测试。

@echo off
Title DeleteFilesInSubfolderList
color 0A
SETLOCAL ENABLEDELAYEDEXPANSION

REM ---------------------------
REM   *** EDIT VARIABLES BELOW ***
REM ---------------------------

set targetFolder=
REM targetFolder is the location you want to delete from    
REM ---------------------------
REM  *** DO NOT EDIT BELOW ***
REM ---------------------------

IF NOT DEFINED targetFolder echo.Please type in the full BASE Symform Offline Folder (I.E. U:\targetFolder)
IF NOT DEFINED targetFolder set /p targetFolder=:
cls
echo.Listing folders for: %targetFolder%\^*
echo.-------------------------------
set Index=1
for /d %%D in (%targetFolder%\*) do (
  set "Subfolders[!Index!]=%%D"
  set /a Index+=1
)
set /a UBound=Index-1
for /l %%i in (1,1,%UBound%) do echo. %%i. !Subfolders[%%i]!

:choiceloop
echo.-------------------------------
set /p Choice=Search for ERRORS in: 
if "%Choice%"=="" goto chioceloop
if %Choice% LSS 1 goto choiceloop
if %Choice% GTR %UBound% goto choiceloop
set Subfolder=!Subfolders[%Choice%]!
goto start

:start
TITLE Delete Text Files - %Subfolder%
IF NOT EXIST %ERRPATH% goto notExist
IF EXIST %ERRPATH% echo.%ERRPATH% Exists - Beginning to test-delete files...
echo.Searching for .txt files...
pushd %ERRPATH%
for /r %%a in (*.txt) do (
echo "%%a" "%Subfolder%\%%~nxa"
)
popd
echo.
echo.
verIFy >nul
echo.Execute^?
choice /C:YNX /N /M "(Y)Yes or (N)No:"
IF '%ERRORLEVEL%'=='1' set question1=Y
IF '%ERRORLEVEL%'=='2' set question1=N
IF /I '%question1%'=='Y' goto execute
IF /I '%question1%'=='N' goto end

:execute
echo.%ERRPATH% Exists - Beginning to delete files...
echo.Searching for .txt files...
pushd %ERRPATH%
for /r %%a in (*.txt) do (
del "%%a" "%Subfolder%\%%~nxa"
)
popd
goto end

:end
echo.
echo.
echo.Finished deleting files from %subfolder%
pause
goto choiceloop
ENDLOCAL
exit


REM Created by Trevor Giannetti
REM An unpublished work
REM (October 2012)

如果您更改

set targetFolder= 

到您想要的文件夹,不会提示您输入该文件夹。 *记住在放入基本路径时,格式末尾不包含'\'。 例如 d:\测试 C:\ TEMP

希望这有帮助

答案 3 :(得分:0)

我必须完成相同的任务,并且使用了“ for”循环和“ del”命令,如下所示:

@ECHO OFF

set dir=%cd%

FOR /d /r %dir% %%x in (archive\) do (
    if exist "%%x" del %%x\*.txt /f /q
)

您可以将dir变量设置为所需的任何起始目录,也可以使用当前目录(%cd%)变量。

这些是“ for”命令的选项:

  • / d用于目录
  • / r递归

这些是“ del”命令的选项:

  • / f强制删除只读文件
  • / q安静模式;禁止提示删除确认。

答案 4 :(得分:-1)

del parentpath(或者只将.bat文件放在父文件夹中)* .txt / s

这将删除父文件夹和所有子文件夹中的所有.txt文件。如果要删除多个文件扩展名,只需添加一个空格并执行相同的操作。防爆。 * .txt * .dll * .xml

相关问题