1

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

dir %foldername% /q 

这有两个问题:

  1. 它在列表中显示所有文件夹名称的内容,所以我必须只读取第一行(包含< DIR >".")或者你必须运行

    目录 %parent_of_foldername% /q | findstr "%文件夹名%"

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

这是我的 c:\

13/03/2013  18.33    <DIR>          NT SERVICE\TrustedInstaProgram Files

13/03/2013  18.33    <DIR>          NT SERVICE\TrustedInstaProgram Files (x86)

那么如何在批处理脚本中获取文件夹的所有者名称?

4

3 回答 3

2

你可以试试这个:

@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%

..和没有计算机名称的所有者:

@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%
于 2013-04-04T20:08:36.123 回答
0
@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

是我的解决方案。为我工作...

于 2013-04-04T20:23:28.220 回答
0

http://msinfluentials.com/blogs/jesper/archive/2007/07/02/show-the-owner-of-a-file.aspx的作者 Jesper Johansson感叹除此之外没有内置命令dir /q但列出了一些其他可以工作的命令行工具。

  • SubInACL.exe
  • FileACL.exe(我找不到这个可用的了)
于 2013-04-04T21:04:57.990 回答