【发布时间】:2019-06-15 23:02:56
【问题描述】:
我正在尝试以递归方式列出文件夹中的所有文件及其参数,以列出目录/子目录中大小超过 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
【问题讨论】:
-
我假设你在脚本前面已经
SetLocal EnableDelayedExpansion了? -
是的,你是对的。我删除了它,但仍然没有运气。更新了上面的整个代码。
-
所以我又等了几分钟,文件中的输出是 FILE RAN 2019/06/15 FileName Size Path Date Time !FILE_NAME! !FILE_SIZE_WINDOWS!!单位! !文件路径! !FILE_DATE! !FILE_TIME!多次使用相同的行
-
那么,我再问同样的问题!
-
仅供参考,您的问题是
10000 bytes,您在上面的评论是more than 1 MB,而1MB 是1048576bytes(可能是1000000)。修复该问题应该会减少您的文件数量,但Set /A仅适用于 32 位整数,这意味着它可能无法计算您的绝大多数文件大小的大小。因此,我的建议是为您的任务寻找替代解决方案,可能是基于 powershell 的解决方案。
标签: batch-file command