对于&查找命令

时间:2018-09-10 07:29:12

标签: batch-file

我的脚本:

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

3 个答案:

答案 0 :(得分:1)

您必须拆分命令的输出。充其量,请使用另一个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

重定向仅执行一次,以避免打开/写入/关闭每一行的文件。

答案 1 :(得分:0)

您似乎只是在使用find /n " " | find "[6]"来获取dir输出的第六行(恰好是列出文件详细信息的行,而其他行是标题行和摘要行)。 / p>

一种更简单的方法如下:

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

答案 2 :(得分:0)

您似乎只是想要datetime或文件名及其驱动器和路径:

只需:

For /r D: %a in ("*.exe" "*.msi") do echo %~dpnta

在cmdline中执行for /?时,请参阅变量替换的更多信息。