Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 如何将调用的结果放入变量中?_Batch File - Fatal编程技术网

Batch file 如何将调用的结果放入变量中?

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

我正在尝试使用另一个名为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%

就这样。编辑器希望我添加更多细节,但我只能提供这些。

我不会将变量的内容传递给被调用的批,而是间接传递变量的名称。因为被调用的批共享相同的环境,所以它可以修改变量。因此,请使用这个示例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