删除文件夹内容但不删除文件夹

3
我有一个文件夹C:\Epson Scans,我正在尝试编写一个脚本来删除文件夹的内容但保留文件夹。我已经弄清楚了如何删除整个文件夹,我可以重新创建它。但我想知道是否有人知道一种方法只删除文件夹内部的内容而不实际删除文件夹。非常感谢您提供的任何帮助!
编辑:插入工作代码,以便我可以循环多台计算机并同时执行操作。请问为什么我插入的代码没有起作用?
@echo off
setlocal enabledelayedexpansion
set Delete_success=0
set total=0

for /F %%G in (pclist.txt) do ( 
    set /a total+=1


pushd "C:\Epson Scans" || exit /B 1
for /D %%I in ("*") do (
    rd /S /Q "%%~I"
)
del /Q "*"
popd

if !ERRORLEVEL!==0 (
        set /a Delete_success+=1
    ) else (
        echo EpsonDelete copy failed on %%G>>EpsonDelete_FailedPCs.txt
    )

)
echo Delete Success: %Delete_success%/%total% >>EpsonDelete_FileCopy.txt

1
del /s 是一个Windows命令,用于删除指定目录及其子目录中的所有文件。 - Stephan
你需要删除子文件夹吗?否则可以使用 del <文件夹名称> /f /q /s 命令。 - lordkain
2
可能是一个重复的问题,参考批处理文件。删除目录中的所有文件和文件夹 - Bill_Stewart
重复的问题,请参考我在那里发布的示例脚本(该问题的被接受答案不正确)。 - Bill_Stewart
3个回答

8
del 仅用于删除文件,因此 del /S /Q "C:\Epson Scans" 可以删除指定文件夹及其子文件夹中的所有文件(由于使用了/S)。 rmdir 用于删除文件夹,因此使用rmdir /S /Q "C:\Epson Scans" 还会删除名为 Epson Scans 的文件夹本身。
当然,您可以随后执行mkdir "C:\Epson Scans" 来新建一个已删除的文件夹1,但这不是被要求的。因此,正确的答案是使用for /D循环遍历 C:\Epson Scans 中的每个文件夹,再使用del /Q 来删除每个文件夹中的文件。
pushd "C:\Epson Scans" || exit /B 1
for /D %%I in ("*") do (
    rd /S /Q "%%~I"
)
del /Q "*"
popd

请注意,rdrmdir相同--请参阅此帖子:MD和MKDIR批处理命令之间的区别是什么? 1) 请注意,如果您这样做,某些文件夹属性将丢失,例如所有者。此外,大小写也会丢失,因为Windows对路径不区分大小写。

请问您还能提供进一步的帮助吗?您的代码完美运行,但是我尝试将其插入我的代码中,结果出现了错误。我想知道您是否可以看一眼,因为它非常简短。 - David Brierton
`@echo off setlocal enabledelayedexpansion set Delete_success=0 set total=0for /F %%G in (pclist.txt) do ( set /a total+=1pushd "C:\Epson Scans" || exit /B 1 for /D %%I in ("") do ( rd /S /Q "%%~I" ) del /Q "" popdif !ERRORLEVEL!==0 ( set /a Delete_success+=1 ) else ( echo EpsonDelete copy failed on %%G>>EpsonDelete_FailedPCs.txt )) echo Delete Success: %Delete_success%/%total% >>EpsonDelete_FileCopy.txt` - David Brierton
你能告诉我哪里出了问题吗? - David Brierton
代码在评论中很难阅读,我建议您发布一个新问题并删除这里的评论... - aschipfl

0

del /S C:\Epson Scans*
(使用 S 删除所选文件夹中的所有文件和文件夹)


1
del 命令会递归删除所有 文件,但会保留空的子文件夹... - aschipfl

0

删除 C:\Epson Scans*.*。 如果这是批处理文件,您可能需要添加 /Q 以避免出现删除确认对话框:

del C:\Epson Scans\*.* /Q

1
需要引号,因为路径中有空格。 - Alex K.
del 命令会递归删除所有 文件,但会保留空的子文件夹... - aschipfl

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接