在批处理文件上需要一些提示

时间:2018-09-19 19:35:05

标签: batch-file

我对编码还很陌生,我遇到的问题可能微不足道,但是却使我不知所措。

我正在使用批处理脚本来自动挂载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命令,因为由于某种原因,除非以管理员身份执行,否则脚本将无法正常工作。

如果有人可以给新手一些见识,将不胜感激。

2 个答案:

答案 0 :(得分:1)

更改目录时,即在参数周围需要用引号引起来

CD /D "%~dp0"

您还可以通过在控制台窗口中运行“帮助”来查看所有%〜选项。在这些脚本中,它是从变量获取路径或文件名的。

答案 1 :(得分:1)

发现了问题的根源。 即使使用引号或多引号,也无法将脚本1的路径忠实传递给脚本2。

感谢所有输入人员!