【问题标题】:get list of files and folders to table format in CMD在 CMD 中获取文件和文件夹列表以表格格式
【发布时间】:2013-04-17 16:36:43
【问题描述】:

我已阅读 this thread,它有所帮助,但没有回答我的具体问题。我希望有人可以提供帮助。

我正在尝试导出包含两列数据的 CSV 文件。第 1 列是实际文件名(带扩展名),第 2 列是文件位置的直接文件夹名称(没有任何路径信息)。我的问题是,这可能吗?下一个问题是,如何将其导出为包含两列信息的 CSV 文件?

这是一个很好的起点,只是它只有文件名(没有显示直接文件夹名称的第二列),而且这似乎不会返回每个文件名的下一行。相反,这只是用逗号分隔而不是返回新行。

您能否建议这是否可行并提供一些想法?

    @echo off
<nul (
  for /f "eol=: delims=" %%F in ('dir /b /o:n') do set /p =""%%F","
) >fileList.csv

谢谢大家!

【问题讨论】:

  • CSV 表示“逗号分隔值”,那么文件名中的逗号呢?
  • @Endoro - 只要 csv 单元格在引号中,文件名中的逗号不应被视为分隔符。
  • @rojo - 你是完全正确的,文件名不包含双引号,所以这会起作用。
  • 这在 stackoverflow.com/questions/19184470/…> 的一行中得到了回答。

标签: csv batch-file cmd dir filelist


【解决方案1】:

如果“直接文件夹名称”是指包含目录的名称,但没有该目录的路径,则:

@ECHO OFF
SETLOCAL
PUSHD "%~1"
FOR /f "delims=" %%i IN ("%cd%") DO SET directory=%%~nxi
(
FOR /f "delims=" %%i IN ('dir /b /a-d /on') DO (
 SETLOCAL enabledelayedexpansion
 ECHO "%%i","!directory!"
 endlocal
)
)>filelist.csv
POPD

所需目录的路径名应作为第一个参数提供,必要时加引号。

基本上,切换到有问题的目录,找到并保存叶目录的名称,然后执行目录扫描返回文件名。引用两者并用逗号输出。内部的setlocal 是允许至少一些愚蠢的目录名称。


编辑 20130422-1421Z
@ECHO OFF
SETLOCAL
PUSHD "%~1"
FOR /f "delims=" %%i IN ("%cd%") DO SET directory=%%~nxi
(
FOR /f "delims=" %%i IN ('dir /b /a-d /on') DO (
 SET fdate=%%~ti
 SETLOCAL enabledelayedexpansion
  ECHO "%%i","!directory!","!fdate:~0,10!"
 endlocal
)
)>filelist.csv
POPD

已编辑以将日期显示为第三个元素。报价保留 - 随意删除。 如果需要日期和时间,请删除SET fdate 行并将"!fdate:~0,10!" 替换为"%%~ti

日期和时间格式 - 可以肯定的是,需要知道您使用的格式。

【讨论】:

  • 谢谢。这对我的目的很有用。但是,无论如何要删除数据周围的引号,还是必须在那里才能正确导出列表?这是脚本为我生成的示例:“108-73.pdf”、“制造 - 控股区”“109-27.pdf”、“制造 - 控股区”“112-14.pdf”、“制造” - 控股区”“112-16.pdf”,“制造-控股区”
  • 当然 - 只需从 ECHO "%%i","!directory!" 行中删除引号
  • 非常感谢您的帮助。有没有办法在导出的文件中添加第三列,文件的最后“修改日期”为“MM/DD/YYYY”?
  • 已编辑,但需要确定您使用的是哪种日期/时间格式。原样将显示您的日期格式 - 而不是 necc。你想要的那个。
  • 谢谢 - 我需要这个显示为 MM/DD/YYYY。那可能吗?尚未检查以查看您的新脚本已生成的格式...将能够在会议结束后约 15 分钟签入
【解决方案2】:

如果您正在执行递归目录搜索,则只能在您的 for /f 循环中通过使用 %%~nxF%%F 获取带有扩展名的文件名。这很容易。

比较棘手的部分是从路径 (%%~pF) 中抓取最后一个文件夹。不过,实际上也有一个简单的技巧。使用另一个for 循环来获取%%~nxI%%~dpF。是的,完整路径的filename.ext尾随目录。

这仅适用于目录不以尾部反斜杠结尾的情况。由于%%~dpF 的结果确实 以尾部反斜杠结尾,因此您只需在末尾添加一个点即可解决它。所以"c:\users\me\Desktop\" 不是"c:\users\me\Desktop\",而是"c:\users\me\Desktop\."~nx 带有一个尾随点。

足够的解释。这是它的完成方式。

@echo off

for /f "delims=" %%F in ('dir /s /b /o:n') do (
    for %%I in ("%%~dpF.") do echo "%%~nxF","%%~nxI"
) >filelist.csv

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-30
    • 2014-05-01
    • 2017-02-25
    • 2015-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多