我必须从具有相同名称的子文件夹中删除文件。我的文件路径如下所示。
d:\test\test1\archive\*.txt
d:\test\try\archive\*.txt
d:\test\model\archive\*.txt
我尝试在批处理脚本中使用del
命令进行删除。
但是文件夹“ test ”中有超过100个文件夹。因此,对每条路径使用del
非常困难。
除“archive”文件夹的父文件夹名称外,所有路径的所有内容都保持不变。所以我想可能有一些简单的方法可以使用批处理脚本删除文件。
有人可以指导我是否有使用批处理脚本删除文件的简单方法?或者我必须为所有100个文件夹重复del
?
答案 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”命令的选项:
这些是“ del”命令的选项:
答案 4 :(得分:-1)
del parentpath
(或者只将.bat文件放在父文件夹中)* .txt / s
这将删除父文件夹和所有子文件夹中的所有.txt文件。如果要删除多个文件扩展名,只需添加一个空格并执行相同的操作。防爆。 * .txt * .dll * .xml