bat脚本筛选出文件内超过半年未修改的文件,筛选结果输入到当前目录的1.txt中,输出内容包含文件名、最后修改日期、大小、作者
时间: 2023-12-10 20:42:16 浏览: 104
可以使用以下的脚本来实现:
```batch
@echo off
setlocal enabledelayedexpansion
REM 设置半年的时间间隔,单位为天
set INTERVAL=183
REM 获取当前日期
for /f "usebackq" %%a in (`%__APPDIR__%wbem\wmic.exe Path Win32_LocalTime Get Day^,Month^,Year /Format:table ^| findstr "="`) do (
for /f "tokens=2 delims==" %%b in ("%%a") do set /a "now=%%b"
)
REM 遍历当前目录下的所有文件
for /r %%f in (*) do (
REM 获取文件最后修改日期
for /f "usebackq" %%a in (`%__APPDIR__%wbem\wmic.exe Path Win32_LogicalFileSecuritySetting Where "Path='%%~f'" Get LastModified /Format:table ^| findstr "="`) do (
for /f "tokens=2 delims==" %%b in ("%%a") do set "modified_date=%%b"
)
REM 计算修改日期与当前日期的差值
set /a "days_passed=now - modified_date"
REM 判断是否超过半年未修改
if !days_passed! geq %INTERVAL% (
REM 获取文件大小
for /f "usebackq" %%a in (`%__APPDIR__%where.exe %%~ff`) do set "file_size=%%~za"
REM 获取文件作者
for /f "usebackq tokens=2 delims==," %%a in (`%__APPDIR__%wbem\wmic.exe Path Win32_LogicalFileOwner Where "Path='%%~ff'" Get Owner /Format:csv ^| findstr /v "Owner"`) do set "file_author=%%~a"
REM 输出结果到1.txt
echo %%~nxf, !modified_date!, !file_size!, !file_author! >> 1.txt
)
)
```
解释一下脚本的具体实现:
1. 首先设置半年的时间间隔(单位为天),并获取当前日期。
2. 然后使用 `for /r` 命令遍历当前目录下的所有文件。
3. 对于每个文件,使用 WMIC 命令获取文件的最后修改日期,并计算出距离当前日期的天数差值。
4. 如果该差值超过半年(即 `INTERVAL` 变量),则获取文件的大小和作者,并将结果输出到 `1.txt` 文件中。
5. 最后,使用 `echo` 命令将结果输出到 `1.txt` 文件中。
需要注意的是,在获取文件大小和作者时,需要使用 `where` 命令获取文件的绝对路径,然后再使用 WMIC 命令获取文件的属性。此外,由于 WMIC 命令返回的字符串中包含了逗号,因此需要使用 `findstr` 命令去除掉 CSV 文件的标题行。
阅读全文