【问题标题】:Drive Letter Variable in Filepath文件路径中的驱动器号变量
【发布时间】:2016-09-16 12:55:12
【问题描述】:

我创建了一个 ISO,其中包含一个名为 AutoRun.exe 的文件。我创建了一个 PowerShell 脚本来挂载并将挂载的驱动器号保存到 letter.txt

$Mounted= Mount-DiskImage -PassThru "C:\Users\Skulliam\Documents\DiskImage.iso"
$DriveLetter = ($Mounted | Get-Volume).DriveLetter
$DriveLetter | Out-File letter.txt

然后我尝试从letter.txt 访问驱动器号。例如,如果它将 ISO 挂载到驱动器 F,则批处理将运行 F:\Autorun.exe

for /f "Delims=" %%a in (letter.txt) do (
     set DRIVE=%%a
)
START %DRIVE%:\AutoRun.exe
pause

错误状态

Windows 找不到 ':\AutoRun.exe'。

【问题讨论】:

    标签: powershell batch-file


    【解决方案1】:

    Out-File 以 Unicode 格式创建输出文件,您的批处理脚本无法处理该文件。将输出编码改为Ascii

    ... | Out-File 'letter.txt' -Encoding Ascii
    

    话虽如此,您为什么还要使用两种不同的脚本和不同的语言?您可以像这样从 PowerShell 运行可执行文件:

    & "${DriveLetter}:\Autorun.exe"
    

    如果您需要彼此分开运行脚本,您可以在第二个 PowerShell 脚本中获取驱动器,如下所示:

    $DriveLetter = Get-Content 'letter.txt'
    & "${DriveLetter}:\Autorun.exe"
    

    【讨论】:

    • 这应该可以正常工作,并且确实可以,但它希望支持文件(ini、cfg)是执行 Powershell 的位置(在本例中是我的桌面)。有什么解决办法吗?
    • 你在说什么“支持文件”?
    • “autorun.inf”和“AutoRunGUI.dll”
    • 将工作目录更改为文件所在的位置。
    • 我该如何做到这一点?
    【解决方案2】:

    您的批次代码是正确的。包含字母 C 的新 letter.txt 文件将启动 C:\AutoRun.exe

    你试过了吗?如果它有效,您的问题就在您的 PowerShell 脚本中。

    我无法执行此 PowerShell 脚本,因为我的系统无法识别“Mount-DiskImage”和“GetVolume”。

    【讨论】:

    • Powershell 工作得很好;我可以将文本文档与实际的 iso 驱动器号进行比较,它们是相等的。在某个地方,运行可执行文件本身出了点问题...
    • 可能需要设置执行路径?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-23
    • 2011-10-01
    • 1970-01-01
    • 2016-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多