2013-08-06 6 views
2

Мне нужно создать пакетный файл Windows, который генерирует CSV-файл с тремя полями для всех файлов в каталоге (за вычетом самого командного файла!).Windows пакетный файл для создания csv список файлов и дат

Поля:

  1. Имя файла (! Это может включать в себя запятые)
  2. Дата создания
  3. Дата изменения

Обратите внимание, что пакетный файл будет запускаться из каталога, и должен знать, чтобы сгенерировать файл .csv для файлов в текущем каталоге, но должен не указать командный файл или сгенерированный CSV-файл.

Powershell, vbscript и т. Д. В моей ситуации нецелесообразны, поэтому он должен быть пакетным файлом Windows.

EDIT:

Вот два основных подхода, которые я пробовал.

Первая попытка: Я попытался отделяя оголенные имена файлов в «temp1.tmp», список файлов с созданными метками времени в «temp2.tmp», и список файлов с модифицированными метками времени в «temp3 .tmp».

DIR /B /A:-D-H | FIND /V "Print Files.bat" | FIND /V "File List" | FIND /V "temp" > "temp1.tmp" 
DIR /A:-D-H /T:C | FIND /V "Print Files.bat" | FIND /V "File List" | FIND /V "temp" > "temp2.tmp" 
DIR /A:-D-H /T:W | FIND /V "Print Files.bat" | FIND /V "File List" | FIND /V "temp" > "temp3.tmp" 

MORE +5 "temp2.tmp" > "temp4.tmp" 
COPY /Y "temp4.tmp" "temp2.tmp" 
MORE +5 "temp3.tmp" > "temp4.tmp" 
COPY /Y "temp4.tmp" "temp3.tmp" 
DEL /F/Q "temp4.tmp" 

Но проблема с этим подходом заключается в том, что я не могу понять, как читать строки из более чем одного файла за раз. Вот ближе всего, что я нашел, но это только из одного файла:

FOR /F "delims=" %%i IN (temp1.tmp) DO (
    ECHO."%%i" >> "File List.csv" 
) 

Вторая попытка: Я пытался избежать использования временных файлов, но безрезультатно.

FOR %%i IN (*.*) DO @ECHO "%%~ni%%~xi",%%~ti >> "File List.csv" 

Проблема второго подхода заключается в том, что он не исключает имя пакетного файла, и он не обеспечивает метку времени создания файла.

Есть ли решение сделать для меня любую из этих работ или подход, который я еще не пробовал?

+0

SO не «писать код для свободного меня» типа сайта. что ты уже испробовал? –

+0

@AnsgarWiechers & Ken White: Вы оба правы. Я очень торопился, когда писал этот вопрос и забыл описать свои попытки решить проблему. – Elessar

+0

Укажите местный формат времени, европейский или AM/PM? – Endoro

ответ

4

попробовать это:

@ECHO OFF &SETLOCAL 
(FOR /f "delims=" %%a IN ('dir /b /a-d') DO (
    FOR /f "tokens=1-3*" %%x IN ('dir /a-d /tc "%%~a"^|findstr "^[0-9]"') DO (
     ECHO "%%a",%%~ta,%%x %%y %%z 
    ) 
))>DIR.csv 
TYPE DIR.csv 
+0

Это тоже делает работу, и ее немного легче понять. – Elessar

2

Нечто подобное может работать:

@echo off 

setlocal EnableDelayedExpansion 

(
    echo "Name","Modification Time","Creation Time" 
    for %%f in (*) do (
    set "name=%%~nxf" 
    if not "!name!"=="%~nx0" (
     set "mtime=%%~tf" 
     for /f "tokens=1-3" %%d in (
     'dir /t:c "!name!" ^| find /i "!name!"' 
    ) do set "ctime=%%~d %%~e %%~f" 
     echo "!name!","!mtime!","!ctime!" 
    ) 
) 
) > output.csv 
+0

Спасибо! Хотя имена командного файла и файла csv не исключены, я уверен, что я смогу понять эту часть. Я бы поддержал ответ, но у меня недостаточно репутации. – Elessar

+0

Имя командного файла * исключено. Однако имя CSV не является. –

+0

Вы правы. Я смотрел на другой файл в списке. – Elessar

0

Вот командная строка один лайнер, который не включает в себя вновь создать список файлов в списке:

(for /f "tokens=1-4*" %A in ('dir /a-d /tc^|findstr "^[0-9]"') do @if "%E" neq "FileList.csv" echo "%E",%A %B %C,%~tE)>"FileList.csv" 

Вот пакетный скрипт, который не включает в себя или вновь созданный файл списка:

@echo off 
>"FileList.csv" (
    for /f "tokens=1-4*" %%A in (
    'dir /a-d /tc^|findstr "^[0-9]"' 
) do if "%~f0" neq "%%~fE" if "%%E" neq "FileList.csv" echo "%%E",%%A %%B %%C,%%~tE 
) 
0

Я имел требование, чтобы прочитать число строк в двух файлах и вывод в файл CSV.

@ECHO OFF 
cd "D:\CSVOutputPath\" 
echo Process started, please wait... 
echo FILENAME,FILECOUNT> SUMMARY.csv 
for /f %%C in ('Find /V /C "" ^< "D:\Trial\Salary.txt"') do set Count=%%C 
echo Salary,%Count%>> SUMMARY.csv 
for /f %%C in ('Find /V /C "" ^< "D:\Trial\Tax.txt"') do set Count=%%C 
echo Tax,%Count%>> SUMMARY.csv 

> перезаписывает существующее содержимое файла и >> будет добавлять новые данные к существующим данным

Смежные вопросы