我尝试使用另一个名为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%
关于它。编辑希望我添加更多细节,但这是我能给予的全部。
答案 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 /?