如何将调用结果放入变量?

时间:2017-04-29 18:20:41

标签: batch-file

我尝试使用另一个名为uppercase.bat的批处理文件将现有字符串转换为大写字母。

@echo off
set /p TitleID=Enter the ID of the title you want to download. 
set /p GameName=What is the name of the game you are trying to download? 

:Execute
java -jar JNUSTool.jar %TitleID% -dlEncrypted
pause

:Change_to_uppercase 
call %~dp0\uppercase.bat %TitleID%

:Rename
echo Renaming to %GameName%...
rename "%~dp0temp_%UpperTitleID%" "%~dp0%GameName%"
pause

uppercase.bat这样做:

@ECHO OFF
SET STRING=%1
IF [%STRING%]==[] GOTO:EOF
SET STRING=%STRING:a=A%
SET STRING=%STRING:b=B%
SET STRING=%STRING:c=C%
SET STRING=%STRING:d=D%
SET STRING=%STRING:e=E%
SET STRING=%STRING:f=F%
SET STRING=%STRING:g=G%
SET STRING=%STRING:h=H%
SET STRING=%STRING:i=I%
SET STRING=%STRING:j=J%
SET STRING=%STRING:k=K%
SET STRING=%STRING:l=L%
SET STRING=%STRING:m=M%
SET STRING=%STRING:n=N%
SET STRING=%STRING:o=O%
SET STRING=%STRING:p=P%
SET STRING=%STRING:q=Q%
SET STRING=%STRING:r=R%
SET STRING=%STRING:s=S%
SET STRING=%STRING:t=T%
SET STRING=%STRING:u=U%
SET STRING=%STRING:v=V%
SET STRING=%STRING:w=W%
SET STRING=%STRING:x=X%
SET STRING=%STRING:y=Y%
SET STRING=%STRING:z=Z%
ECHO %STRING%

关于它。编辑希望我添加更多细节,但这是我能给予的全部。

3 个答案:

答案 0 :(得分:0)

我不会将var的内容传递给被调用的批处理,而是间接地传递var的名称。由于被调用的批处理共享相同的环境,因此可以修改该变量。因此,请使用此示例upperCase.bat

@Echo off&SetLocal EnableExtensions EnableDelayedExpansion
Set "ToUpper=!%~1!"
For %%U In (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) Do (
  Set "ToUpper=!ToUpper:%%U=%%U!"
)
Endlocal&Set "%~1=%ToUpper%"

示例输出:

> Set "TitleID=this is all lower case"

> upperCase.bat TitleID

> Set Tit
TitleID=THIS IS ALL LOWER CASE

答案 1 :(得分:0)

您的外部批处理文件会在变量string中返回结果,因此您需要做的就是将该值分配给UpperTitleID - 或将UpperTitleID更改为string当你想在重命名命令中使用它时。

set "UpperTitleID=%string%"

语法SET "var=value"(其中value可以为空)用于确保任何杂散尾随空格不包含在分配的值中。 set /a可以安全地使用“无报价”。

请注意%~dp0\中的call %~dp0\uppercase.bat可能是多余的。如果它位于当前目录或uppercase.bat上指定的任何目录中,Windows将找到path(例如,在批处理文件目录中,如果您在批处理文件目录中包含批处理文件目录) path

Rename是一个糟糕的标签名称,因为它是一个关键字。

答案 2 :(得分:0)

%~dp0扩展为批处理文件的路径,始终以反斜杠结尾。因此,不要在此字符串后面指定额外的反斜杠,尽管它可以工作,因为Windows会在以后删除第二个反斜杠。

如果当前批处理文件路径包含例如空格字符,建议双引号整个字符串,即使用

call "%~dp0uppercase.bat" %TitleID%

分配给环境变量TitleID的字符串未引用,因此在将其解析为批处理文件uppercase.bat时,不能在命令行中包含空格字符或具有特殊含义的其他字符。

我建议将uppercase.bat的代码嵌入批处理文件中。

@echo off
setlocal EnableExtensions EnableDelayedExpansion

echo/
echo Enter the ID of the title you want to download.
echo/
set "TitleID="

:TitlePrompt
set /P "TitleID=Title: "
if not defined TitleId goto TitlePrompt
set "TitleId=!TitleId:"=!"
if not defined TitleId goto TitlePrompt

echo/
echo What is the name of the game you are trying to download?
echo/
set "GameName="

:GamePrompt
set /P "GameName=Game:  "
if not defined GameName goto GamePrompt
set "GameName=!GameName:"=!"
if not defined GameName goto GamePrompt

echo/
java.exe -jar "%~dp0JNUSTool.jar" "!TitleID!" -dlEncrypted

for %%U in (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) do set "TitleID=!TitleID:%%U=%%U!"

echo Renaming to !GameName! ...
ren "%~dp0temp_!TitleID!" "!GameName!"

endlocal

注意:必须指定要重命名的文件的新名称,不带路径或重命名失败。

上面的批处理代码检查用户是否确实输入了任何内容,并从输入的字符串中删除双引号,如果剩余输入的字符串的长度大于0,则再次检查。

应进一步改进批次代码,以便从输入的标题和游戏名称中删除文件名中不可接受的所有字符,如:\/<>|和其他字符。

echo/只输出一个空行,因为在命令提示符窗口中运行此批处理文件时可以看到该窗口,这对于在开发中测试批处理文件是首选,以查看Windows命令解释程序输出的错误。造成语法错误。

要了解使用的命令及其工作原理,请打开命令提示符窗口,执行以下命令,并完全阅读为每个命令显示的所有帮助页面。

  • echo /?
  • endlocal /?
  • goto /?
  • if /?
  • ren /?rename /?
  • set /?
  • setlocal /?