Для & Найти Команду - PullRequest
       5

Для & Найти Команду

0 голосов
/ 10 сентября 2018

Мой скрипт:

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 голосов
/ 10 сентября 2018

Вы, похоже, используете find /n " " | find "[6]" просто для получения 6-й строки вывода dir (которая является строкой со списком сведений о файле, в то время как другие строки являются строками заголовка и сводки).

Более простой способ сделать это заключается в следующем:

For /r C: %%a in ("*.exe" "*.msi") do (
  echo %%a
  Dir /ta %%a | find "/"
)

Поиск "/" в дате, которая отображается в той же строке, что и файл. Этот символ не отображается в заголовке или резюме.

Одно предостережение заключается в том, что предполагается, что ваша локаль использует "/" в качестве разделителя даты (что имеет место в большинстве стран).

Кстати, время последнего доступа не всегда записывается. См. Этот вопрос: пакетный скрипт, который сообщает мне, когда в последний раз был доступен файл

0 голосов
/ 10 сентября 2018

Похоже, вам не хватает date и time или имени файла с указанием диска и пути:

просто сделайте:

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

см. Больше о подстановке переменных при выполнении for /? из cmdline.

0 голосов
/ 10 сентября 2018

Вы должны разделить вывод вашей команды. В лучшем случае используйте для этого еще один цикл 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

Перенаправление выполняется только один раз, чтобы избежать открытия / записи / закрытия файла для каждой строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...