首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >For & Find命令

For & Find命令
EN

Stack Overflow用户
提问于 2018-09-10 15:29:12
回答 3查看 130关注 0票数 0

我的脚本:

代码语言:javascript
复制
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
EN

回答 3

Stack Overflow用户

发布于 2018-09-10 15:33:36

您必须拆分命令的输出。最好使用另一个for /f循环:

代码语言:javascript
复制
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

根据问题中的新信息编辑

首先获取所有需要的数据,然后回显完整的行。

代码语言:javascript
复制
@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
EN

Stack Overflow用户

发布于 2018-09-10 18:22:09

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

一种更简单的方法如下:

代码语言:javascript
复制
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

票数 0
EN

Stack Overflow用户

发布于 2018-09-10 19:19:43

看起来你只是想要datetime,或者文件名加上它的驱动器和路径:

只需执行以下操作:

代码语言:javascript
复制
For /r D: %a in ("*.exe" "*.msi") do echo %~dpnta

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52252998

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档