Batch file 批处理:获取文件夹所有者的名称

Batch file 批处理:获取文件夹所有者的名称,batch-file,dir,file-ownership,Batch File,Dir,File Ownership,我所知道的获取批处理脚本中文件夹所有者的唯一命令是: dir %foldername% /q 这有两个问题: 它在一个列表中显示所有foldername的内容,所以我只能阅读 第一行(包含和“)或您必须运行的 目录%foldername%/q的父目录%findstr“%foldername%” 如果所有者有一个很长的名称(例如:TrustedInstaller),这将被修剪 这是我的c:\ 13/03/2013 18.33 <DIR> NT SERVIC

我所知道的获取批处理脚本中文件夹所有者的唯一命令是:

dir %foldername% /q 
这有两个问题:

  • 它在一个列表中显示所有foldername的内容,所以我只能阅读 第一行(包含)或您必须运行的

    目录%foldername%/q的父目录%findstr“%foldername%”

  • 如果所有者有一个很长的名称(例如:TrustedInstaller),这将被修剪

  • 这是我的c:\

    13/03/2013  18.33    <DIR>          NT SERVICE\TrustedInstaProgram Files
    
    13/03/2013  18.33    <DIR>          NT SERVICE\TrustedInstaProgram Files (x86)
    
    13/03/2013 18.33 NT服务\trustedStateProgram文件
    2013年3月13日18.33 NT服务\受信任的STA程序文件(x86)
    
    那么如何在批处理脚本中获取文件夹的所有者名称?

    您可以尝试以下方法:

    @echo off &setlocal
    set "foldername=c:\temp"
    set "owner="
    
    for /f "tokens=3*" %%i in ('dir /q %foldername%^|findstr "<DIR>"') do if not defined owner set "owner=%%j"
    echo %owner%
    

    这是我的解决办法。为我工作…

    的作者Jesper Johansson哀叹除了
    dir/q
    之外没有内置命令,但列出了一些其他可以工作的命令行工具

    • FileACL.exe(我再也找不到可用的此文件)

    好的,这是一个解决方案,我知道,但是:1)速度非常慢(dir…findstr..)2)如果所有者的名称超过23个字符,则该解决方案不起作用(例如,“NT SERVICE\TrustedStat”被截断
    @echo off &setlocal
    set "foldername=c:\temp"
    set "owner="
    
    for /f "tokens=1*delims=\" %%i in ('dir /q %foldername%^|findstr "<DIR>"') do if not defined owner set "owner=%%j"
    echo %owner%
    
    @echo off &setlocal
    set "foldername=c:\temp"
    set "owner="
    
    for /f "tokens=2delims=\:" %%i in ('cacls "%foldername%" ^| find "%computername%"') do set "owner=%%i"
    echo %owner%
    
    @ECHO OFF
    SETLOCAL
    SET "owner="
    FOR /f "tokens=2delims=\" %%i IN ('dir /q "%~1"' ) DO IF NOT DEFINED owner CALL :setown %%i
    ECHO owner of "%~1" is %owner%
    
    GOTO :eof
    
    :setown
    SET owner=%*
    :setownl
    SET $2=%2
    IF defined $2 shift&GOTO setownl
    IF NOT "%1"=="." SET "owner="&GOTO :eof
    SET owner=%owner:~0,-2%
    GOTO :eof