遍历 'dir' 的输出,连接用户名和文件夹名

Iterating through output from 'dir' concatenates User and Folder name

以下循环并不总是只生成创建者用户。很多时候它将用户与文件夹连接起来。不知道是批次限制还是漏了什么

for /f "tokens=5,* SKIP=4" %%b IN ('dir "%folder%" /Q /TW /AD') do (
    ECHO User: %%b
)

大约 90-95% 的时间它给我用户,但其他时候它给我 user_folder

User: AAAAAAAAAADEV\iasimo_dFLD001_FLD001

很可能是因为目录列的大小是固定的。 建议您使用另一种方法

1)WMIC :

@echo off

set "folder=C:\Windows\System32"

for /f "tokens=* delims=" %%a in ("%folder%") do (
     set "fpath=%%~pa"
     set "fname=%%~na"
     set "fdrive=%%~da"
)

set "fpath=%fpath:\=\%"

for /f "usebackq tokens=* delims=" %%a in (`wmic path Win32_Directory where "path='%fpath%' and drive='%fdrive%' and filename='%fname%'" get  CSName /format:value`) do (
    for /f "tokens=* delims=" %%z in  ("%%a") do (

        if "%%z" neq "" (
            set "%%z"
        )
    )
)

echo %CSName%

2) tooltipInfo.bat。要获得 folder/file 所有者,您需要使用 10 "magic number"(10 属于所有者,174 属于创建者):

call tooltipInfo.bat "c:\something" 10

你应该给你这样的输出:

c:\something :
pc\user

还有其他可能的方法。

for /f "tokens=4 SKIP=4" %%b IN ('dir "%folder%" /Q /TW /AD') do (
    ECHO User: %%b
)

这在我的系统中有效(用户是第 4 列)。

编辑:在 Win 7 和 Win 8.1 中测试

所以我最终采用了一种更笨的方式 - 用户列似乎是 22 个字符,每当 domain/username 命中时我都会遇到这个问题。我通过将用户名之后的所有内容作为单个标记来解决它,然后将第 22 个字符之后的所有内容都砍掉(下面的代码是获取文件夹名称 - 基本上是同一件事,但我需要两者,所以这就是我得到它的方式)。

for /f "tokens=1-4,* SKIP=4" %%b IN ('dir "%%a" /Q /TW /AD') do (
        set _folder=%%f
        SET _folder=!_folder:~23!
)