2

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

领域:

  1. 文件名(这可以包括逗号!)
  2. 创立日期
  3. 修改日期

请注意,批处理文件将从目录运行,并且应该知道为当前目录中的文件生成 .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"

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

有没有一种解决方案可以让这些工作对我有用,或者我还没有尝试过的方法?

4

5 回答 5

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
于 2013-08-06T21:35:26.483 回答
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
于 2013-08-06T21:33:58.047 回答
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
)
于 2014-12-25T14:49:07.903 回答
0

将目录列表写入 CSV的单行PowerShell 命令

于 2014-09-17T21:29:19.660 回答
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

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

于 2016-09-03T10:55:12.107 回答