尝试使用Windows的handle.exe创建脚本以解锁文件夹中的所有锁定文件。但是当我分割输出时,文件名值是……很奇怪(所有其他值都是OK)。
例子 …
以下代码段可以提供帮助。
@ECHO OFF SETLOCAL EnableExtensions EnableDelayedExpansion for /f "tokens=1-7,* delims= " %%a in (' handle64.exe C:\Windows\System32\en-US\Kernel -u -nobanner ' ) do ( REM echo a = "%%a" REM echo b = "%%b" REM echo c = "%%c" REM echo d = "%%d" REM echo e = "%%e" REM echo f = "%%f" REM echo g = "%%g" REM echo h = "%%h" for /F "tokens=*" %%H in ("%%~h") do echo h="%%H" a="%%a" )
在这里 for 循环是
for
%%a
handle64.exe
%%H
%%h
wmic (和 的 handle64 强> 以及)行为:每个输出行以。结尾 0x0D0D0A ( <CR><CR><LF> 而不是共同的 0x0D0A ( <CR><LF> )。
wmic
handle64
0x0D0D0A
<CR><CR><LF>
0x0D0A
<CR><LF>
见Dave Benham的 WMIC 和 FOR /F :修复尾随 <CR> 问题
WMIC
FOR /F
<CR>
的 产量 强> (截断):
==> D:\bat\SO\55065841.bat h="C:\Windows\System32\en-US\KernelBase.dll.mui" a="GoldenDict.exe" h="C:\Windows\System32\en-US\KernelBase.dll.mui" a="chrome.exe" h="C:\Windows\System32\en-US\kernel32.dll.mui" a="chrome.exe" h="C:\Windows\System32\en-US\KernelBase.dll.mui" a="AppleChromeDAV.exe" ==>
您遇到的输出与我们从输出中获得的输出相同 wmic.exe 在一个 For 环。因此,我会假设 handle64.exe 还输出一个额外的 的 <CR> 强> 。
wmic.exe
For
如果是这种情况,您应该通过额外的运行结果 For 循环,就像它一样 WMIC 。看看其中的一些 WMIC 本网站上的示例,以了解它的使用示例。或者看看 这个话题 过去 dostips.com 。
这是一个使用它的例子:
For /F "Tokens=*" %%A In (' handle64.exe C:\dev\massunlocker\sample-dir -u -nobanner ')Do For /F "Tokens=1-8" %%B In ("%%A")Do (Rem Echo B = "%%B" Rem Echo C = "%%C" Rem Echo D = "%%D" Rem Echo E = "%%E" Rem Echo F = "%%F" Rem Echo G = "%%G" Rem Echo H = "%%H" Rem Echo I = "%%I" Echo [%%I]) Pause
我不是说这是一个答案..我只是需要格式化的文本。 正如Compo所指出的那样......在输出结束时确实存在0D 0D 0A但在解析器应该关心它的中间并不存在。
他们的解析器应该比那更好。
作为一种解决方法(如Compo所提到的),获取调用的输出并通过另一个for循环运行它,它工作得很好。我通过函数调用完成了下面的一个。
@echo off Set THE_DIR=%TEMP% for /f "delims=" %%a in ( 'handle64.exe %THE_DIR% -u -nobanner' ) do call :Process_Line "%%a" goto :EOF :Process_Line for /f "tokens=1,2,3,4,5,6,7,8 delims= " %%a in ( 'echo %*' ) do ( echo a = "%%a" echo b = "%%b" echo c = "%%c" echo d = "%%d" echo e = "%%e" echo f = "%%f" echo g = "%%g" echo h = "%%h" ) goto :EOF