我对编码还很陌生,我遇到的问题可能微不足道,但是却使我不知所措。
我正在使用批处理脚本来自动挂载VHD,在其中执行文件,然后暂停直到用户按下任何键,这将导致VHD挂载并退出脚本。 这是主要的批处理文件:
@echo off
set fileVHD=Gord
CD /D "%~dp0"
powershell -command "Start-Process mount.cmd '%~dp0%fileVHD%.vhd' -Verb runas"
timeout /t 1
for /f %%D in ('wmic volume get DriveLetter^, Label ^| find "%fileVHD%"') do set usb=%%D
CD /D %usb%
index.html
echo "!!!!!!!!!!!!!!!!!!!!Press any key to fully close this program.!!!!!!!!!!!!!!!!!!!!!!!!!"
pause
CD /D "%~dp0"
powershell -command "Start-Process unmount.cmd '%~dp0%fileVHD%.vhd' -Verb runas"
exit
这是安装脚本(不是我做的):
@echo off
setlocal enabledelayedexpansion
if "%~1"=="" (
echo Usage: %~nx0 [vhd] [letter]
exit /b 1
)
set "vhdPath=%~dpnx1"
set "driveLetter=%2"
if "!driveLetter!"=="" (
echo Mounting "!vhdPath!"
) else (
echo Mounting "!vhdPath!" to "!driveLetter!":
)
REM
REM create diskpart script
REM
set "diskPartScript=%~nx0.diskpart"
echo select vdisk file="!vhdPath!">"!diskPartScript!"
echo attach vdisk>>"!diskPartScript!"
REM assign the drive letter if requested
if not "!driveLetter!"=="" (
echo select partition 1 >>"!diskPartScript!"
echo assign letter="!driveLetter!">>"!diskPartScript!"
)
REM Show script
echo.
echo Running diskpart script:
type "!diskPartScript!"
REM
REM diskpart
REM
diskpart /s "!diskPartScript!"
del /q "!diskPartScript!"
echo Done!
endlocal
当所有文件都位于不包含空格的系统路径中时,一切正常。但是它打破了有空间的地方。 这意味着在代码中的某个地方,路径可能由于缺少引号而被错误地定义,可能是在安装脚本中。麻烦在于,当我开始使用所有“%〜....”变量路径名时,我无法完全掌握安装脚本。 我不得不混入一些powershell命令,因为由于某种原因,除非以管理员身份执行,否则脚本将无法正常工作。
如果有人可以给新手一些见识,将不胜感激。
答案 0 :(得分:1)
更改目录时,即在参数周围需要用引号引起来
CD /D "%~dp0"
您还可以通过在控制台窗口中运行“帮助”来查看所有%〜选项。在这些脚本中,它是从变量获取路径或文件名的。
答案 1 :(得分:1)
发现了问题的根源。 即使使用引号或多引号,也无法将脚本1的路径忠实传递给脚本2。
感谢所有输入人员!