获取CMD中的表格格式的文件和文件夹列表

时间:2013-04-17 16:36:43

标签: csv batch-file cmd dir filelist

我已阅读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

谢谢大家!

2 个答案:

答案 0 :(得分:0)

如果通过“立即文件夹名称”表示包含目录的名称但没有该目录的路径,则:

@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

日期和时间格式 - 确定,需要知道您正在使用的格式。

答案 1 :(得分:0)

如果您正在进行递归目录搜索,则只能使用for /f%%F的{​​{1}}循环中获取带扩展名的文件名。这很容易。

更棘手的部分是从路径(%%~nxF)抓取最后一个文件夹。实际上,这也是一个简单的伎俩。使用其他%%~pF循环获取for %%~nxI。是的,完整路径%%~dpF尾随目录。

这仅在目录不以尾部反斜杠结尾时才有效。由于filename.ext 的结果以尾部反斜杠结尾,因此您只需在末尾添加一个点即可解决此问题。因此,%%~dpF代替"c:\users\me\Desktop\"~nx带有一个尾随点。

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

"c:\users\me\Desktop\."