遍历 '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
- FLD001_FLD001是文件夹名
- AAAAAAAAAADEV\iasimo_d 是用户
很可能是因为目录列的大小是固定的。
建议您使用另一种方法
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!
)
以下循环并不总是只生成创建者用户。很多时候它将用户与文件夹连接起来。不知道是批次限制还是漏了什么
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 是用户
很可能是因为目录列的大小是固定的。 建议您使用另一种方法
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!
)