我已阅读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
谢谢大家!
答案 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\."