我有一个批处理文件,它查看 inf 文件并找到 open= Open= 或 OPEN= 并让程序运行。
@echo off
setlocal ENABLEDELAYEDEXPANSION
set _drive=W:
set _cmd=
cd /d !_drive!\
for /f "tokens=1,2* delims==" %%i in (autorun.inf) do (
if "%%i"=="open" set _cmd=%%j
if "%%i"=="Open" set _cmd=%%j
if "%%i"=="OPEN" set _cmd=%%j
)
if not defined _cmd (
echo Unable to parse autorun.inf and find 'open='
) else (
!_drive!\!_cmd!
START !_drive!
)
endlocal
我希望有人比我自己更擅长powershell,因为我一直在网上寻找一些东西。所以我应该提到这是这里的OP
免责声明:这是在短时间内通过一些基本的谷歌搜索完成的。因此,可能有更有效和/或更稳健的方法来处理下面的脚本(例如,通过管道命令一起)。
假设您只是想读取
autorun.inf
并启动.exe
在 eg 之后找到的文件(或您拥有的文件)open=
,您可能想尝试类似以下的操作:前任。搜索_INF.ps1
要运行上面的脚本,请从命令行调用
powershell
,确保您指定脚本的路径,例如:(假设命令窗口与您的文件在同一目录中
.ps1
打开)。请注意,在您明确允许之前,Windows 可能不允许您运行 PowerShell 脚本。
笔记
在上面的脚本中,
Select-String
最初设置$_match
为 egPath\to\autorun.inf:2:open=program.exe
。使用该
-List
选项,Select-String
仅返回给定输入文件的匹配文本的第一个实例。open=
不区分大小写(Select-String
据我所知,这是 的默认值)。所以它应该涵盖open=
,Open=
并且OPEN=
在原始脚本中。open=
可能会shellexecute=
用于某些autorun.inf
文件。$_match.Line
只返回匹配的行(例如open=program.exe
)而不是 ex。Path\to\autorun.inf:2:open=program.exe
.根据粗略的测试,该
CMD /C START $_drive
语法似乎只适用于裸盘符(例如W:
)。$_file = 'C:\path\to\autorun.inf'
是占位符。这可能是例如$_file = $_drive + '\autorun.inf'
,假设autorun.inf
驻留在 ex 的根目录中。W:\
.PowerShell 资源
微软
变量
写输出
选择字符串
匹配信息对象
启动过程
ThinkPowerShell.com
StackOverflow.com
SS64.com
电源外壳。短而甜。将任何命令复制到网络搜索中以阅读 MS 文档。
编辑:代码改进以处理命令行参数并检查“ShellExecute”