我的脚本:
cd\
set Directory=Directory
set Filename=Filename
set Date Created=Date Created
set Date Modified=Date Modified
set Date Accessed=Date Accessed
set Size=Size
Echo %Directory%,%Filename%,%Date Created%,%Date Modified%,%Date Accessed%,%Size% >>C:\MyText.csv
For /r C: %%a in ("*.exe" "*.msi") Do (
@echo %%a
For /f "tokens=1* delims=]" %%b in ('dir /tc "%%a" ^| find /n " " ^| find "[6]"') Do echo %%c >>C:\MyText.csv
For /f "tokens=1* delims=]" %%b in ('dir /tw "%%a" ^| find /n " " ^| find "[6]"') Do echo %%c >>C:\MyText.csv
For /f "tokens=1* delims=]" %%b in ('dir /ta "%%a" ^| find /n " " ^| find "[6]"') Do echo %%c >>C:\MyText.csv
)
@pause发布于 2018-09-10 15:33:36
您必须拆分命令的输出。最好使用另一个for /f循环:
For /r C: %%a in ("*.exe" "*.msi") do (
@echo %%a
for /f "tokens=1* delims=]" %%b in (' Dir /ta "%%a" ^| find /n " " ^| find "[6]"') do echo %%c
)它将dir输出拆分为%%b=[6和%%c=10/09/2018 02:22 PM xxxxxxx.exe
根据问题中的新信息编辑:
首先获取所有需要的数据,然后回显完整的行。
@echo off
setlocal enabledelayedexpansion
(
Echo Directory,Filename,Date Created,Date Modified,Date Accessed,Size
For /r C: %%a in ("*.exe" "*.msi") Do (
For /f "tokens=1,2" %%b in ('dir /tc "%%a" ^| findstr /b "[0-9]"') Do set "tc=%%b %%c"
For /f "tokens=1,2" %%b in ('dir /tw "%%a" ^| findstr /b "[0-9]"') Do set "tw=%%b %%c"
For /f "tokens=1,2" %%b in ('dir /ta "%%a" ^| findstr /b "[0-9]"') Do set "ta=%%b %%c"
echo %%~dpa,%%~nxa,!tc!,!tw!,!ta!,%%~za
)
)>C:\MyText.csv重定向只执行一次,以避免打开/写入/关闭每一行的文件。
发布于 2018-09-10 18:22:09
您使用find /n " " | find "[6]"似乎只是为了获得dir输出的第6行(恰好是列出文件详细信息的行,而其他行是标题和摘要行)。
一种更简单的方法如下:
For /r C: %%a in ("*.exe" "*.msi") do (
echo %%a
Dir /ta %%a | find "/"
)这将在与文件同一行显示的日期中搜索"/“。此字符不会出现在标题或摘要中。
需要注意的是,它假定您的区域设置使用"/“作为日期分隔符(这是大多数国家/地区的情况)。
顺便说一句,上次访问时间可能并不总是被记录下来。请看这个问题:batch script that tells me when was the last time a file has been accessed
发布于 2018-09-10 19:19:43
看起来你只是想要date和time,或者文件名加上它的驱动器和路径:
只需执行以下操作:
For /r D: %a in ("*.exe" "*.msi") do echo %~dpnta在cmdline中执行for /?时,请参阅有关变量替换的更多信息。
https://stackoverflow.com/questions/52252998
复制相似问题