我试图递归列出文件夹中的所有文件及其参数,以列出目录/子目录中大小大于10000字节且修改时间不超过30天的所有文件。问题在于下面的代码只是卡住而没有输出。
@echo on
SET Path1=Z:\Server_P8BE890914E369FBB6FBD0C91748F8B19
break > Z:\FilestobeDeleted.txt
ECHO FILE RAN %date:~10%/%date:~4,2%/%date:~7,2% >>%CDID%\FilestobeDeleted.txt
echo FileName Size Path Date Time >>Z:\FilestobeDeleted.txt
for /f "skip=1 tokens=1,2,3,4,5* delims=,] " %%i in ('forfiles /p %Path1% /s /m *.* /c "cmd /c if @fsize gtr 10000 echo @fsize @file @path @fdate @ftime" /d -30') do (
set FILE_SIZE_WINDOWS=%%i
set FILE_NAME=%%j
set FILE_PATH=%%k
set FILE_DATE=%%l
set FILE_TIME=%%m
set "unit=B"
for %%b in (KB MB GB TB PB EB ZB YB) do if 1024 lss !FILE_SIZE_WINDOWS! (
set "unit=%%b"
if !FILE_SIZE_WINDOWS! lss 2147483647 (set /a "FILE_SIZE_WINDOWS=FILE_SIZE_WINDOWS/1024") else (set "FILE_SIZE_WINDOWS=!FILE_SIZE_WINDOWS:~0,-3!")
)
echo !FILE_NAME! !FILE_SIZE_WINDOWS!!unit! !FILE_PATH! !FILE_DATE! !FILE_TIME! >>Z:\FilestobeDeleted.txt
)
echo Done
答案 0 :(得分:0)
下面是一个示例powershell解决方案,该解决方案尝试在Z:\FilestobeDeleted.txt
中列出源目录及其子目录中所有文件的文件名,大小,完全限定的路径以及修改的日期和时间,大于或等于1MB
,并且在30
天前进行了最后修改。它使用switch语句为这些大小分配适当的单位,然后将其四舍五入到最多两位小数。
Function Convert-BytesToHighest {
[CmdletBinding()]
Param([Parameter(Mandatory=$False,Position=0)][Int64]$Size)
Switch ($Size) {
{$Size -GT 1PB} {$NewSize="$([Math]::Round(($Size/1PB),2))PB";Break}
{$Size -GT 1TB} {$NewSize="$([Math]::Round(($Size/1TB),2))TB";Break}
{$Size -GT 1GB} {$NewSize="$([Math]::Round(($Size/1GB),2))GB";Break}
{$Size -GT 1MB} {$NewSize="$([Math]::Round(($Size/1MB),2))MB";Break}
{$Size -GT 1KB} {$NewSize="$([Math]::Round(($Size/1KB),2))KB";Break}
Default {$NewSize = "$([Math]::Round($Size,2))Bytes";Break}
}
Return $NewSize
}
Get-ChildItem -Path "Z:\Server_P8BE890914E369FBB6FBD0C91748F8B19" -Recurse -Force -ErrorAction SilentlyContinue |
Where-Object {
(! $_.PSIsContainer) -And ($_.Length -GE 1048576) -And ($_.LastwriteTime -LT (Get-Date).AddDays(-30))
} |
Format-Table Name,@{Expression={Convert-BytesToHighest $_.Length};Label="Size"},FullName,LastWriteTime -AutoSize |
Out-File -FilePath "Z:\FilestobeDeleted.txt" -Width 512
您应该能够像这样从batch-file或cmd运行它:
PowerShell -ExecutionPolicy RemoteSigned -File "MyScript.ps1"
如果您发现某些信息由于文件路径过长而被截断,则可以根据需要增加Width
值。