如何使用 Windows 命令行删除特定目录中在特定日期创建的所有文件?

如何使用 Windows 命令行删除特定目录中在特定日期创建的所有文件?

我无意中破坏了 PC 上的 tarball,现在我的 Documents 文件夹中有大约 200 万个不需要的文件。如果我尝试使用 Windows 资源管理器查看该文件夹的内容,它就会崩溃,因此现在我试图编写一行代码,可以在命令行中使用,以删除 Documents 文件夹中在该日期创建的所有内容。

我在 StackOverflow 上找到了一些答案,这些答案展示了如何对超过一定年龄(例如 10 天或更早)的文件执行此操作,但没有针对单个特定日期执行此操作,而且这是我不知道的编程语言和语法。

这行代码应该说什么?

答案1

改编自此处:https://stackoverflow.com/questions/55822013/get-list-of-files-with-a-specific-date-range

您需要使用 PowerShell 来执行此操作。PowerShell 现在是 Windows 的标准 shell。

步骤1:打开 PowerShell 窗口。由于您要删除自己的 Documents 文件夹中的内容,因此您不需要以管理员身份运行它,但如果它不起作用,您可以在以管理员身份打开 PowerShell 后再试一次。

第2步:运行此命令列出您要删除的所有文件。这是不包含删除部分的完整命令:

Get-ChildItem <path to your documents folder> | Where-Object {$_.CreationTime -like "04/20/2023 *"}

我发现这种语法在返回结果方面效果最好。如果日期或月份只有一位数,请在其前面加上“0”以确保其长度为两位数。

如果您希望在删除之前手动查看列表,也可以将其输出到文件中:

Get-ChildItem <path to your documents folder> | Where-Object {$_.CreationTime -like "04/20/2023 *"} | export-csv "C:\temp\filesToDelete.csv"

步骤3:确认这是要删除的文件列表后,再次运行相同的命令,但添加删除位:

Get-ChildItem <path to your documents folder> | Where-Object {$_.CreationTime -like "04/20/2023 *"} | Remove-Item

如果由于隐藏或只读文件而出现错误,请将参数添加-ForceRemove-Itemcmdlet。

答案2

如何使用 Windows 命令行删除特定目录中在特定日期创建的所有文件?

cd /d "%UserProfile%\Documents\" & @for /f tokens^=*delims^= %G in ('2^>nul dir /a:-d /b /o:d ".\*.*"')do @wmic datafile where "name='%cd:\=\\%\\%~nxG'" get creationdate /format:xml | findstr "VALUE.*20230607" >nul && @del /q /f /a: ".\%~nxG"

为了文件:

@echo off && setlocal

chDir /d "%UserProfile%\Documents\"

for /f tokens^=*delims^= %%G in =;(
   '2^>nul dir /a:-d /b /o:d ".\*.*"
   ')do call %:^) "%cd:\=\\%\\%%~nxG"

%:^) 
if "%~1" == "" endlocal && goto :eOf
for /f "usebackqtokens=4delims=<>" %%i in (`
     wmic datafile where "name='%~1'" get creationdate /format:xml ^| findstr "VALUE.*20230607"
    `)do del /q /f /a: "%~1" & exit /b


1.输入您的文件夹,最好%UserProfile%\Documents用完整路径替换“ ”:

chDir /d "C:\Users\ulfelder\Documents"

2./a-d在 for /f 循环中列出文件(不包括文件夹)

for /f tokens^=*delims^= %%G in ('2^>nul dir /a:-d /b /o:d ".\*.*"')do ...

3.用于Wmic datafile where "name='x'"循环获取每个文件的创建日期:

...)do wmic datafile where "name='%~1'" get creationdate /format:xml 

4.wmic将输出重定向到findstr与相关日期匹配"...20230607"

wmic ... get ... | findstr "VALUE.*20230607"
  • 观察1:将示例中使用的日期更改为要删除的文件的选择条件所要选择的日期,并遵循布局年月日(日期布局 20230607) 在:
 wmic ... get ... | findstr "VALUE.*20230607"
  • 观察2: 该字符串20230607适用于日期07(七)本月062023 年 6 月,还指定一个特定的时间,例如:11.pm 和22分钟,使用 yyyymmdd模糊数学
wmic ... get ... | findstr "VALUE.*202306071123"
  • 观察3:以 YYYYMMDDHHMMSS.milliseconds[+/-]GMT_Offset_in_minutes 格式返回wmic日期和时间。]十三***
for /f ...(`wmic datafile where "name='path\\file'" get creationdate ...| findstr "VALUE.*strong>202306071122"`)do ...
2023060705112213.021224-180

::----------------------------------------------
:: WMIC Retunrs:  Means:
::----------------------------------------------
::         Year = 2023
::        Month = 06
::          Day = 07
::        Hours = 11
::      Minutes = 22
::      Seconds = 13
:: Milliseconds = 021224
::   GMT_offset = -180 minutes 
::                 Greenwich Mean Time (GMT-3)
::                 Brasilia Time Zone
::----------------------------------------------

5.findstr省略with的输出>nul,如果相关日期与从文件获取的文件日期相符,则&&操作符(return 0)将del循环执行删除文件的命令:

... findstr "VALUE.*20230607" >nul && del /q /f /a: "%~1"

其他资源:

相关内容