Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Windows中的命令提示符下删除特定目录中的文件/子文件夹_Windows_Batch File_File Io_Cmd_Directory - Fatal编程技术网

如何在Windows中的命令提示符下删除特定目录中的文件/子文件夹

如何在Windows中的命令提示符下删除特定目录中的文件/子文件夹,windows,batch-file,file-io,cmd,directory,Windows,Batch File,File Io,Cmd,Directory,比如说,有一个名为%pathtofolder%的变量,它清楚地表明它是文件夹的完整路径 我想删除此目录中的每个文件和子文件夹,但不想删除目录本身 CD [Your_Folder] RMDIR /S /Q . 但是,可能会出现类似“此文件/文件夹已在使用中”的错误。。。当这种情况发生时,它应该继续并跳过该文件/文件夹 是否有此命令?使用: del %pathtofolder%\*.* /s /f /q 这将删除%pathtofolder%中的所有文件和子文件夹,包括只读文件,并且不会提示

比如说,有一个名为
%pathtofolder%
的变量,它清楚地表明它是文件夹的完整路径

我想删除此目录中的每个文件和子文件夹,但不想删除目录本身

CD [Your_Folder]
RMDIR /S /Q .
但是,可能会出现类似“此文件/文件夹已在使用中”的错误。。。当这种情况发生时,它应该继续并跳过该文件/文件夹

是否有此命令?

使用:

del %pathtofolder%\*.*   /s /f  /q

这将删除
%pathtofolder%
中的所有文件和子文件夹,包括只读文件,并且不会提示确认。

您可以使用此shell脚本清理
C:\Temp
中的文件夹和文件:

创建一个包含上述命令的批处理文件(比如delete.bat)。转到delete.bat文件所在的位置,然后运行命令:delete.bat

是我一直最喜欢的作业命令。它适用于删除包含子文件夹的大型文件和文件夹。未创建备份,因此请确保在运行此命令之前已安全复制了文件

RMDIR "FOLDERNAME" /S /Q

这将以静默方式删除文件夹以及所有文件和子文件夹。

我能想到的最简单的解决方案是使用

RD /S /Q folderPath
然后再次创建此目录:

MD folderPath

您可以使用以下命令删除所有内容和父文件夹本身:

RMDIR [/S] [/Q] [drive:]path            

这将删除文件夹和文件,并留下文件夹

pushd "%pathtofolder%" && (rd /s /q "%pathtofolder%" 2>nul & popd)
…删除给定目录下的所有文件和文件夹,但不删除目录本身

CD [Your_Folder]
RMDIR /S /Q .
您将收到一条错误消息,告诉您RMDIR命令无法访问当前文件夹,因此无法删除它

更新

从有用的注释(感谢),您可以在之间添加
&&
,这样
RMDIR
将不会在
CD
命令失败时运行(例如,键入错误的目录名):

发件人:

/S:删除目录树(指定目录及其所有子目录) 子目录,包括所有文件)

/Q:指定安静模式。在以下情况下不提示确认: 正在删除目录树。(请注意,/q仅在/s为 指定。)


RD代表删除目录

/S:删除所有文件和子文件夹 除了文件夹本身。 使用此选项可以删除整个文件夹树

/Q:安静-不显示YN确认

例如:

RD /S /Q C:/folder_path/here
要删除文件,请执行以下操作:

del PATH_TO_FILE
要删除包含所有文件的文件夹,请执行以下操作:

rmdir /s /q PATH_TO_FOLDER
从特定文件夹中删除所有文件(而不是删除文件夹本身)有点复杂
del/s*
无法删除文件夹,但会从所有子文件夹中删除文件。因此需要两个命令:

del /q PATH_TO_FOLDER\*.*
for /d %i in (PATH_TO_FOLDER\*.*) do @rmdir /s /q "%i"
我使用Powershell

Remove-Item c:\scripts\* -recurse
它将删除文件夹的内容,而不是文件夹本身

用于创建文本文档并复制/粘贴:

@ECHO OFF
rem next line removes all files in temp folder
DEL /A /F /Q /S "%temp%\*.*"
rem next line cleans up the folder's content
FOR /D %%p IN ("%temp%\*.*") DO RD "%%p" /S /Q
rmdir /s/q "%temp%"
mkdir "%temp%"
选择另存为和文件名:

删除临时bat

另存为类型:所有文件,然后单击“保存”按钮

它适用于任何类型的帐户(管理员或标准用户)。跑吧


在本例中,我使用了一个临时变量,但您可以使用任何其他变量!PS:仅适用于Windows操作系统

我尝试了几种方法,但没有一种能正常工作

我在网站上发现了这两个步骤:


它完全按照我的需要和OP的规定工作。

2018-06-01发布的答案中没有一个是,除了发布的单个命令行中的,实际上删除了
%PathToFolder%
中的所有文件和所有文件夹/目录。这就是为什么要用一个非常简单的命令行来删除文件夹的所有文件和子文件夹以及批处理文件,并用一个更复杂的解决方案来解释为什么在2018-06-01使用DELforRD发布的所有其他答案都无法清理文件夹完全是


简单的单命令行解决方案当然也可以在批处理文件中使用:

pushd "%PathToFolder%" 2>nul && ( rd /Q /S "%PathToFolder%" 2>nul & popd )
此命令行包含三个依次执行的命令

第一个命令PUSHD将当前目录路径推送到堆栈上,然后使
%PathToFolder%
成为运行命令进程的当前目录

这在默认情况下也适用于路径,因为命令扩展在默认情况下是启用的,在这种情况下,PUSHD创建一个指向指定网络资源的临时驱动器号,然后使用新定义的驱动器号更改当前驱动器和目录

PUSHD如果指定的目录根本不存在,则输出以下错误消息以处理STDERR

系统找不到指定的路径

通过使用
2>nul
将此错误消息重定向到设备nul来抑制此错误消息

仅当将当前命令进程的当前目录更改为指定目录成功(即指定目录完全存在)时,才会执行下一个命令RD

带有选项
/Q
/S
的命令RD悄悄地删除一个目录及其所有子目录,即使指定的目录包含具有隐藏属性或只读属性集的文件或文件夹。系统属性从不阻止删除文件或文件夹

未删除的有:

  • 用作任何正在运行的进程的当前目录的文件夹。如果某个文件夹用作任何正在运行的进程的当前目录,则无法删除该文件夹的整个文件夹树

  • 当前由任何正在运行的进程打开的文件,其文件访问权限设置为“文件打开”,以防止在由正在运行的应用程序打开时删除该文件
    rmdir /s/q "%temp%"
    mkdir "%temp%"
    
    forfiles /P %pathtofolder% /M * /C "cmd /c if @isdir==FALSE del @file"
    
    forfiles /P %pathtofolder%  /M * /C "cmd /c if @isdir==TRUE rmdir /S /Q @file"
    
    pushd "%PathToFolder%" 2>nul && ( rd /Q /S "%PathToFolder%" 2>nul & popd )
    
    @echo off
    setlocal EnableExtensions DisableDelayedExpansion
    
    rem Clean the folder for temporary files if environment variable
    rem PathToFolder is not defined already outside this batch file.
    if not defined PathToFolder set "PathToFolder=%TEMP%"
    
    rem Remove all double quotes from folder path.
    set "PathToFolder=%PathToFolder:"=%"
    
    rem Did the folder path consist only of double quotes?
    if not defined PathToFolder goto EndCleanFolder
    
    rem Remove a backslash at end of folder path.
    if "%PathToFolder:~-1%" == "\" set "PathToFolder=%PathToFolder:~0,-1%"
    
    rem Did the folder path consist only of a backslash (with one or more double quotes)?
    if not defined PathToFolder goto EndCleanFolder
    
    rem Delete all files in specified folder including files with hidden
    rem or read-only attribute set, except the files currently opened by
    rem a running process which prevents deletion of the file while being
    rem opened by the application, or on which the current user has not
    rem the required permissions to delete the file.
    del /A /F /Q "%PathToFolder%\*" >nul 2>nul
    
    rem Delete all subfolders in specified folder including those with hidden
    rem attribute set recursive with all files and subfolders, except folders
    rem being the current directory of any running process which prevents the
    rem deletion of the folder and all folders above, folders containing a file
    rem opened by the application which prevents deletion of the file and the
    rem entire folder structure to this file, or on which the current user has
    rem not the required permissions to delete a folder or file in folder tree
    rem to delete.
    for /F "eol=| delims=" %%I in ('dir "%PathToFolder%\*" /AD /B 2^>nul') do rd /Q /S "%PathToFolder%\%%I" 2>nul
    
    :EndCleanFolder
    endlocal
    
    del /A /F /Q "%PathToFolder%\*" >nul 2>nul
    for /F "eol=| delims=" %%I in ('dir "%PathToFolder%\*" /AD /B 2^>nul') do rd /Q /S "%PathToFolder%\%%I" 2>nul
    
    dir "%PathToFolder%\*" /AD /B 2>nul