Windows批处理文件,用于创建文件和日期的csv列表

时间:2013-08-06 17:17:28

标签: windows batch-file

我需要创建一个Windows批处理文件,该文件生成.csv文件,其中包含目录中所有文件的三个字段(减去批处理文件本身!)。

字段:

  1. 文件名(可以包含逗号!)
  2. 创作日期
  3. 修改日期
  4. 请注意,批处理文件将从目录运行,并且应该知道为当前目录中的文件生成.csv文件,但列出批处理文件或生成的文件。 csv文件。

    Powershell,vbscript等在我的情况下是不可行的,所以它必须是Windows批处理文件。

    修改

    以下是我尝试过的两种主要方法。

    第一次尝试:我尝试将裸文件名分成“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"
    

    第二种方法的问题是它不排除批处理文件名,也不提供文件创建时间戳。

    是否有解决方案让这些对我有用,或者我尚未尝试过的方法?

5 个答案:

答案 0 :(得分:5)

试试这个:

@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

答案 1 :(得分: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

答案 2 :(得分:1)

这是一个命令行一行,不包括列表中新创建的列表文件:

(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
)

答案 3 :(得分:0)

答案 4 :(得分: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

>将覆盖文件的现有内容,>>会将新数据附加到现有数据