有人可以帮我创建一个批处理文件,它会将下面的详细信息列为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
答案 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"
如果您愿意,也可以轻松地将Name
,Directory
,BaseName
,Extension
以及文件对象支持的其他列添加到CSV中。