首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >批处理脚本if语句返回错误‘此时意外’

批处理脚本if语句返回错误‘此时意外’
EN

Stack Overflow用户
提问于 2014-07-11 15:02:36
回答 1查看 242关注 0票数 0

我有一个批处理脚本,它为Win7/WinXP编写注册表项,以便旧的视频游戏可以正常运行,但批处理本身不起作用。脚本如下:

代码语言:javascript
复制
echo on

setlocal ENABLEEXTENSIONS
set KEY_NAME=HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Steam App 311080
set VALUE_NAME=InstallLocation
for /F "usebackq tokens=3*" %%A IN (`reg query "%KEY_NAME%" /v "%VALUE_NAME%" 2^>nul ^| find "%VALUE_NAME%"`) do (

set OUTPUT_SEVEN=%%A%%B
)

setlocal ENABLEEXTENSIONS
set KEY_NAME=HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Steam App 311080
set VALUE_NAME=InstallLocation
for /F "usebackq tokens=3*" %%A IN (`reg query "%KEY_NAME%" /v "%VALUE_NAME%" 2^>nul ^| find "%VALUE_NAME%"`) do (
set OUTPUT_XP=%%A%%B
)

reg query "HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Steam App 311080"
if %ERRORLEVEL% EQU 0 goto Win7

reg query "HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Steam App 311080"
if %ERRORLEVEL% EQU 1 goto WinXP


:Win7
(
echo Running Windows 7 Script
REG ADD "HKLM\SOFTWARE\Wow6432Node\Madia\Echelon" /V Path1 /T reg_sz /D "%OUTPUT_SEVEN%\\Data\\" /F
REG ADD "HKLM\SOFTWARE\Wow6432Node\Madia\Echelon" /V Path2 /T reg_sz /D "%OUTPUT_SEVEN%\\Data\\" /F
REG ADD "HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Echelon" /V InstallLocation /T reg_sz /D "%OUTPUT_SEVEN%\\" /F
REG ADD "HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Echelon" /V InstallSource /T reg_sz /D "%OUTPUT_SEVEN%\\" /F
set QQ=%OUTPUT_SEVEN%
goto exit
)

:WinXP
(
echo Running Windows XP Script
REG ADD "HKLM\SOFTWARE\Madia\Echelon" /V Path1 /T reg_sz /D %OUTPUT_XP%\\Data\\" /F
REG ADD "HKLM\SOFTWARE\Madia\Echelon" /V Path2 /T reg_sz /D %OUTPUT_XP%\\Data\\" /F
REG ADD "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Echelon" /V InstallLocation /T reg_sz /D %OUTPUT_XP%\\" /F
REG ADD "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Echelon" /V InstallSource /T reg_sz /D %OUTPUT_XP%\\" /F
set QQ=%OUTPUT_XP%
goto exit
)
:exit
(
start /d"%QQ%" /wait Game.exe
)

在命令提示符下运行脚本:

代码语言:javascript
复制
c:\Program Files (x86)\Steam\SteamApps\common\Echelon>gamelauncher.bat

c:\Program Files (x86)\Steam\SteamApps\common\Echelon>echo on

c:\Program Files (x86)\Steam\SteamApps\common\Echelon>setlocal ENABLEEXTENSIONS


c:\Program Files (x86)\Steam\SteamApps\common\Echelon>set KEY_NAME=HKLM\SOFTWARE
\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Steam App 311080

c:\Program Files (x86)\Steam\SteamApps\common\Echelon>set VALUE_NAME=InstallLoca
tion

c:\Program Files (x86)\Steam\SteamApps\common\Echelon>for /F "usebackq tokens=3*
" %A IN (`reg query "HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\
Uninstall\Steam App 311080" /v "InstallLocation" 2>nul | find "InstallLocation"`
) do (set OUTPUT_SEVEN=%A%B )

c:\Program Files (x86)\Steam\SteamApps\common\Echelon>(set OUTPUT_SEVEN=C:\Progr
amFiles (x86)\Steam\steamapps\common\Echelon )

c:\Program Files (x86)\Steam\SteamApps\common\Echelon>setlocal ENABLEEXTENSIONS


c:\Program Files (x86)\Steam\SteamApps\common\Echelon>set KEY_NAME=HKLM\SOFTWARE
\Microsoft\Windows\CurrentVersion\Uninstall\Steam App 311080

c:\Program Files (x86)\Steam\SteamApps\common\Echelon>set VALUE_NAME=InstallLoca
tion

c:\Program Files (x86)\Steam\SteamApps\common\Echelon>for /F "usebackq tokens=3*
" %A IN (`reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\St
eam App 311080" /v "InstallLocation" 2>nul | find "InstallLocation"`) do (set OU
TPUT_XP=%A%B )

c:\Program Files (x86)\Steam\SteamApps\common\Echelon>reg query "HKLM\SOFTWARE\W
ow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Steam App 311080"

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninsta
ll\Steam App 311080
DisplayIcon REG_SZ C:\Program Files (x86)\Steam\steam\games\1b116bbca7
813266288d61df77b3baca0297aaab.ico
DisplayName REG_SZ Echelon
HelpLink REG_SZ http://support.steampowered.com/
InstallLocation REG_SZ C:\Program Files (x86)\Steam\steamapps\common\E
chelon
Publisher REG_SZ MADia Entertainment
UninstallString REG_SZ "C:\Program Files (x86)\Steam\steam.exe" steam:
//uninstall/311080
URLInfoAbout REG_SZ http://www.madia.ru/echelon.html
NoRepair REG_DWORD 0x1
NoModify REG_DWORD 0x1


c:\Program Files (x86)\Steam\SteamApps\common\Echelon>if 0 EQU 0 goto Win7
\Steam\steamapps\common\Echelon was unexpected at this time.

c:\Program Files (x86)\Steam\SteamApps\common\Echelon>set QQ=C:\ProgramFiles (x8
6)\Steam\steamapps\common\Echelon

如果有比我聪明的人能弄清楚这里发生了什么,我会非常感激。

EN

回答 1

Stack Overflow用户

发布于 2014-07-11 16:21:46

问题在于赋值给变量的值中的圆括号

代码语言:javascript
复制
set QQ=C:\ProgramFiles (x86)\Steam\steamapps\common\Echelon

将被执行。变化

代码语言:javascript
复制
set QQ=%OUTPUT_SEVEN%

转到

代码语言:javascript
复制
set "QQ=%OUTPUT_SEVEN%"

并对其余的set命令执行相同的操作。这可以防止特殊字符出现问题,并避免在存储值的末尾包含不需要的空格。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24691849

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档