在运行.bat之类的程序时,"X:....path"
经常变成""X:..path
并产生错误。例如,我正在安装apktool,然后它显示为:'""C:Program' is not recognized as an internal or external command,
operable program or batch file.
然后,我复制命令并将其中一个双引号放在末尾,如下所示:"C:Program"
一切都很顺利,安装很成功。然后我试图解码一个apk,但出现了完全相同的问题:'""C:Program' is not recognized as an internal or external command, operable program or batch file.
这次我不知道如何修复它,它不像现在的.bat,我无法打开@echo并复制最后一个命令并编辑它。所以我在这里问:如果我是唯一遇到这个问题的人吗?有办法解决这个问题吗?非常感谢。
我的命令:
apktool d test.apk
运行解码命令的图像:1
apktool.bat
内容:
@echo off
setlocal
set BASENAME=apktool_
chcp 65001 2>nul >nul
set java_exe=java.exe
if defined JAVA_HOME (
set java_exe="%JAVA_HOME%binjava.exe"
)
rem Find the highest version .jar available in the same directory as the script
setlocal EnableDelayedExpansion
pushd "%~dp0"
if exist apktool.jar (
set BASENAME=apktool
goto skipversioned
)
set max=0
for /f "tokens=1* delims=-_.0" %%A in ('dir /b /a-d %BASENAME%*.jar') do if %%~B gtr !max! set max=%%~nB
:skipversioned
popd
setlocal DisableDelayedExpansion
rem Find out if the commandline is a parameterless .jar or directory, for fast unpack/repack
if "%~1"=="" goto load
if not "%~2"=="" goto load
set ATTR=%~a1
if "%ATTR:~0,1%"=="d" (
rem Directory, rebuild
set fastCommand=b
)
if "%ATTR:~0,1%"=="-" if "%~x1"==".apk" (
rem APK file, unpack
set fastCommand=d
)
:load
"%java_exe%" -jar -Duser.language=en -Dfile.encoding=UTF8 "%~dp0%BASENAME%%max%.jar" %fastCommand% %*
rem Pause when ran non interactively
for /f "tokens=2" %%# in ("%cmdcmdline%") do if /i "%%#" equ "/c" pause
使用set "var=value"
设置字符串值-这样可以避免尾部空格引起的问题。不要分配终端、Space或
"
——从元素中构建路径名——这可能会让过程变得更容易。如果使用语法set var="value"
,则引号将成为指定值的一部分。
set java_exe="%JAVA_HOME%binjava.exe"
应该是
set "java_exe=%JAVA_HOME%binjava.exe"
(在整个代码中应用此原则(
然后,如果您需要">在任何地方,将其插入需要的地方-不要试图将其作为变量值的一部分。
这样至少可以解决你的一些问题。