迭代来自' dir'的输出连接用户和文件夹名称

时间:2015-05-28 17:38:14

标签: batch-file cmd directory

以下循环并不总是只生成创建者用户。很多时候它将用户与文件夹连接起来。我不知道它是否是批次的某种限制,或者我错过了什么

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
  • FLD001_FLD001是文件夹名称
  • AAAAAAAAAADEV \ iasimo_d是用户

3 个答案:

答案 0 :(得分:1)

最有可能因为dir列的大小固定。 建议你使用另一种方法

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。要获得文件夹/文件所有者,您需要使用10"幻数" (10是所有者174是为创作者):

call tooltipInfo.bat "c:\something" 10

你应该给你输出如下:

c:\something :
pc\user

还有其他可能的方法。

答案 1 :(得分:0)

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

这适用于我的系统(用户是第4列)。

编辑:在Win 7和Win 8.1中都进行了测试

答案 2 :(得分:0)

所以我最终做了一点点笨拙的方式 - 似乎用户列是22个字符,每当域名/用户名命中时我都会遇到这个问题。我通过将用户名后的所有内容作为单个令牌解决它,然后在第22个字符之后删除所有内容(下面的代码是获取文件夹名称 - 基本相同但我需要两个以便我如何得到它)。

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