Batch file 如何将调用的结果放入变量中?
我正在尝试使用另一个名为uppercase.bat的批处理文件将现有字符串转换为大写Batch file 如何将调用的结果放入变量中?,batch-file,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 pau
@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%
就这样。编辑器希望我添加更多细节,但我只能提供这些。我不会将变量的内容传递给被调用的批,而是间接传递变量的名称。因为被调用的批共享相同的环境,所以它可以修改变量。因此,请使用这个示例upperCase.bat 样本输出:
> Set "TitleID=this is all lower case"
> upperCase.bat TitleID
> Set Tit
TitleID=THIS IS ALL LOWER CASE
您的外部批处理文件将以变量字符串的形式返回结果,因此您需要做的只是将该值指定给UpperTitleID,或者在您希望在rename命令中使用它时将UpperTitleID更改为string
set "UpperTitleID=%string%"
语法SET var=value(其中value可能为空)用于确保分配的值中不包含任何多余的尾随空格。set/a可以无报价安全使用
请注意,调用%%dp0\uppercase.bat中的%%dp0\可能是多余的。如果uppercase.bat位于当前目录或路径上指定的任何目录中(例如,在批处理文件目录中,如果您已将批处理文件目录包含在路径中),Windows将找到uppercase.bat
重命名是一个糟糕的标签名称,因为它是一个关键字。%~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/outputs只是一个空行,从命令提示符窗口中运行此批处理文件时可以看到,这是在开发中测试批处理文件的首选窗口,以便在出现语法错误时查看Windows命令解释器输出的错误
要了解所使用的命令及其工作方式,请打开命令提示符窗口,在其中执行以下命令,并非常仔细地阅读为每个命令显示的所有帮助页面
回声/?
endlocal/?
转到/?
如果/?
任/?或者重命名/?
集/?
setlocal/?
好的你的问题是什么?不知道你的大写字母.bat是什么意思,很难帮上忙。如果另一批设置了var UpperTitleID,应该没有问题。只是让你知道,我编辑了我的帖子,我不知道它是否告诉你,所以我发布了这个评论。只是让你知道,我编辑了我的帖子,我不知道它是否告诉你,所以我发表了这个评论。我把%dp0放在那里,因为我计划将来在其他计算机上使用这个批处理文件,我不想去重命名它。当然,在那个例子中它不适用,但不管怎样。
@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