6

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

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

我尝试del在批处理脚本中使用命令删除。但是文件夹“ test ”中有100多个文件夹。del因此,每条路径都很难使用。

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

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

4

5 回答 5

29

您也可以使用/s开关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

如果您for在批处理文件中使用该选项,请记住使用 2%而不是 1。

于 2012-12-10T12:11:16.007 回答
5

在 bat 文件中使用 powershell

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

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

PowerShell Remove-Item C:/*  -Exclude WINDOWS,autoexec.bat -force -recurse
于 2014-02-21T20:44:01.027 回答
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:\test c:\temp

希望这可以帮助

于 2012-12-10T15:27:21.283 回答
1

我必须完成同样的任务,我使用了一个“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 安静模式;禁止提示删除确认。
于 2019-03-30T00:05:12.687 回答
-1

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

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

于 2015-07-07T19:41:20.203 回答