我在堆栈溢出上看到了一些类似的问题,但我无法得到far的任何答案。
我有一个挂载驱动器并回显驱动器盘符(预期$driverLetter = "G“|| "H”||“I”)的.ps1文件:
$mountDisk = Mount-DiskImage -ImagePath $args[0] -Passthru
$driveLetter = ($mountDisk | Get-Volume).DriveLetter
echo $driveLetter我从这个批处理文件中运行它:
FOR /F "usebackq delims=" %%i IN (`powershell -File ./mountDisk.ps1 "%1"`) DO SET "d=%%i"
Echo %d%每次我得到一个空的变量。我尝试过设置环境变量,但得到了相同的结果。
发布于 2021-05-11 19:33:42
假设传递给批处理文件的初始路径根据需要用双引号引起来,我可能会这样做。
@Echo Off & SetLocal EnableExtensions & Set "ISODrv="
If /I Not "%~x1" == ".iso" (Exit /B 1) Else For %%G In ("%~1") Do If "%%~aG" GEq "d" Exit /B 2
For /F %%G In ('%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe -NoProfile -Command "(Mount-DiskImage -ImagePath \"%~1\" -PassThru | Get-Volume).Driveletter" 2^>NUL') Do Set "ISODrv=%%G"
If Not Defined ISODrv (Exit /B 3) Else Echo %ISODrv%这样做消除了预先创建PowerShell脚本,然后对执行策略进行任何后续修改的需要。如果接收到的输入值也是现有的ISO文件,则仅继续进行映像挂载。如果你从一个获取退出代码的进程中运行这个批处理文件,1意味着输入没有以不区分大小写的字符串.iso结束,2意味着输入确实以不区分大小写的字符串.iso结束,但它是一个目录,而不是一个文件,3将指示返回挂载的ISO镜像驱动器盘符时出错。
发布于 2021-05-11 23:47:00
尝试执行以下操作,从PowerShell运行cmd,并将它们的变量通过路径传递到其中
# The command to pass to cmd.exe /cript
$var = "echo hello world & ping $ip & pause"
$ip = "192.168.1.1"
$var2 = "ping $ip & pause"
# Start the process asynchronously, in a new window,
# as the current user with elevation (administrative rights).
# Note the need to pass the arguments to cmd.exe as an *array*.
Start-Process -Verb RunAs cmd.exe -Args '/c', $var2, $varhttps://stackoverflow.com/questions/67482754
复制相似问题