【发布时间】:2021-10-14 09:44:21
【问题描述】:
举个简单的例子:
@ECHO OFF
SET /P phrase="Enter Word : "
SET /a rnum=%random% %%10 +1
ECHO %phrase%
ECHO %rnum%
SET rchar=%phrase:~0,%rnum%%
ECHO %rchar%
Pause
我只是希望能够传递 rnum 变量以将其作为从该用户左侧选择的字符输入到该随机字符。
我似乎无法弄清楚如何将其作为变量传递。
我尝试了enabledelayedexpansion,但没有成功:
@ECHO OFF
SET /P Phrase="Enter Word : "
SET /a rnum=%random% %%10 +1
ECHO %phrase%
ECHO %rnum%
setlocal enabledelayedexpansion
SET rchar=!phrase:~0,%rnum%!
endlocal
ECHO %rchar%
Pause
那么在这种情况下如何将rnum 作为变量传递?感谢您的帮助。
【问题讨论】:
-
问题不在于您启用的延迟扩展,而在于您的
endlocal,它将取消定义在延迟扩展块中定义或修改的任何变量。解决这个问题的最简单方法是用For %%G In ("!phrase:~0,%rnum%!") Do EndLocal & Set "rchar=%%G"替换低代码中的7和8行 -
非常感谢!这似乎行得通。只是一件事,尽管变量现在将结果包含在引号中,就像
phrase=1234567890和rnum=6的结果ECHO %rchar%是"123456"而不仅仅是123456。我确实使用了SET rchar=%rchar:"=%,这似乎可行,但是您提出的代码中还有其他方法吗?再次感谢。 -
对不起HTWingNut,只是我的一个错字,改成
For %%G In ("!phrase:~0,%rnum%!") Do EndLocal & Set "rchar=%%~G"吧!另外请从您的问题中删除解决方案,您不应该为您的问题添加答案/解决方案,这些应该作为答案添加到适当的区域。随意添加它,你甚至可以在足够的时间里接受你自己的答案! -
@Compo - 谢谢。但我认为你的第一行是正确的,它给了我需要的结果。只是它在输出中包含引号,但我用
SET rchar=%rchar:"=%修复了它如果您想将其保留为实际答案,我很乐意将其标记为正确答案。谢谢。
标签: windows batch-file variables substring