用于生成文件列表的批处理文件

时间:2016-06-17 23:53:47

标签: batch-file

有人可以帮我创建一个批处理文件,它会将下面的详细信息列为csv文件输出吗?

- file name
- Date creation
- Modified date
- File size

基本上我的批处理文件应该从包含多个子目录和文件的根目录运行。我尝试了一些有限的知识和借助谷歌下面的脚本。

截至目前,我正在将输出作为文件名,创建&从根目录修改字段。但我无法生成多个文件&文件夹里面。我也没有获得文件大小。

@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!"
    )
  )
) > FileList.csv

2 个答案:

答案 0 :(得分:1)

召集PowerShell,这是擅长此类事情。

powershell "ls -R|select FullName,LastWriteTime,CreationTime,Length|Export-Csv x.csv -NoT"

答案 1 :(得分:0)

如果不是“创建时间”要求,您可以在for /R循环中使用代字号扩展,例如

@echo off & setlocal

>FileList.csv (
    for /R %%I in (*) do echo "%%~fI","%%~tI","%%~zI"
)

在控制台窗口中,输入for /?以获取有关for /R和代字号扩展的完整详细信息。

不幸的是,获取文件的创建时间需要使用dir开关的第二个/T:C命令或wmic命令(更慢)。这是一个采用dir /T:C的解决方案:

@echo off & setlocal

>FileList.csv (
    set "created="
    echo "FileName",ModifiedDate","Size","CreationDate"
    for /R %%I in (*) do (
        setlocal
        for /f "skip=5 tokens=1-3" %%J in ('dir /T:C "%%~fI"') do (
            if not defined created (
                set "created=1"
                echo "%%~fI","%%~tI","%%~zI","%%J %%K %%L"
            )
        )
        endlocal
    )
)

或者您可以改为使用PowerShell one liner:

powershell -noprofile "gci -recurse | select FullName,CreationTime,LastWriteTime,Length | export-csv FileList.csv"

如果您愿意,也可以轻松地将NameDirectoryBaseNameExtension以及文件对象支持的其他列添加到CSV中。