Windows批处理脚本:将包含名称,路径,大小和所有者的所有文件列入csv文件

时间:2014-05-01 19:05:40

标签: windows batch-file

我有一个脚本可以列出文件夹及其子表单下的所有文件,其中包含一些属性,如路径,文件名,修改日期和大小。但是,我无法添加一个额外的属性,文件所有者。

@ECHO off
SET v1=%%~dpF
SET v2=%%~nxF
SET v3=%%~zF
(for /r %%F in (*) do @echo "%v1%","%v2%",%v3%) > test.csv
PAUSE

基本上我想添加第4个参数,它应该显示文件所有者。它在Windows 7环境中。

2 个答案:

答案 0 :(得分:2)

您可以将dir命令与/q开关一起使用,以包含每个文件的所有者。

@ECHO OFF
SetLocal EnableDelayedExpansion
for /r %%a in (*) do for /f "tokens=5" %%b in ('dir /q "%%~fxa" ^| findstr "%%~nxa"') do (
    echo "%%~dpa","%%~nxa","%%~za","%%b"
) >> test.csv

这将始终附加到test.csv,如果您想要始终重新创建test.csv,您可以在括号中包围整个for循环(就像您一样);

@ECHO OFF
SetLocal EnableDelayedExpansion
(for /r %%a in (*) do for /f "tokens=5" %%b in ('dir /q "%%~fxa" ^| findstr "%%~nxa"') do (
    echo "%%~dpa","%%~nxa","%%~za","%%b"
)) > test.csv

答案 1 :(得分:0)

不完全是你要求的,但我改编了一个PowerScript来展示你的要求。只需使用文件和文件夹名称更新PARAM部分,复制并粘贴到PowerShell中,然后按两次输入:

PARAM (
  $Path = 'C:\Users\PATHHERE\',
  $report = 'C:\Users\USERNAME\Desktop\OUTPUTFILENAMEHERE.csv'
)
$LastWrite = @{
  Name = 'Last Write Time'
  Expression = { $_.LastWriteTime.ToString('u') }
}
$Owner = @{
  Name = 'File Owner'
  Expression = { (Get-Acl $_.FullName).Owner }
}
$HostName = @{
  Name = 'Host Name'
  Expression = { $env:COMPUTERNAME }
}

Get-ChildItem -Recurse -Path $Path | 
              select $HostName, $Owner, Name, Directory, $LastWrite, Length   | 
              Export-Csv -NoTypeInformation $Report

此脚本改编自信息found here。我发现批处理文件在处理这些天时遇到的麻烦越来越多,而且PowerShell非常灵活。 serverfault.com以上的那些人无疑能够更好地帮助你解决这些问题。