Batch file 通过for/f循环,保存的变量中添加的空格不会显示在提示中

Batch file 通过for/f循环,保存的变量中添加的空格不会显示在提示中,batch-file,cmd,Batch File,Cmd,我的个人经验值已降至零。我已经将for/l循环的值链接到for/f循环变量输出。现在我可以用空格键突出显示单词的每个字母了。 delimeter是一个for/f循环选项,它让我失明。单词的输出不显示空格。例如,单词is和使用的代码一起显示。直到我尝试输出一个THEWORDISPAT。在这种情况下,输出像一块蓬松的蛋糕一样融合在一起。我找不到我需要的东西。一些提示可能很好。非英语母语 @echo off setlocal enabledelayedexpansion set logic=13 fo

我的个人经验值已降至零。我已经将for/l循环的值链接到for/f循环变量输出。现在我可以用空格键突出显示单词的每个字母了。 delimeter是一个for/f循环选项,它让我失明。单词的输出不显示空格。例如,单词is和使用的代码一起显示。直到我尝试输出一个THEWORDISPAT。在这种情况下,输出像一块蓬松的蛋糕一样融合在一起。我找不到我需要的东西。一些提示可能很好。非英语母语

@echo off
setlocal enabledelayedexpansion
set logic=13
for /l %%a in (1,1,%logic%) do (call :grapefruit %%a)
goto :eof
goto :main

:grapefruit
set count=0
for %%z in (%1) do (
set /a count+=10%3
set var[!count!]=%%z)

:main
set token=  THEWORDIZPAT
for /f "tokens=* delims=" %%b in ("%token%") do (set word=%%b)
set alien=!word:~%var[10]%,1!
for %%y in (%alien%) do (echo|set /p =%%y)
pause > nul
endlocal disabledelayedexpasion

我在dostips论坛上写下了我的问题,我发现了一些来自其他人的匹配。我想出的最终解决办法是

@echo off
setlocal enabledelayedexpansion
for /f %%A in ('echo prompt $H ^| cmd') do set BS=%%A
set "string=XA THEWORDIZPAT"
for /L %%A in (0,1,14) do (
for /f "tokens=* delims=X" %%b in ("!string:~%%A,1!") do (
set /p=%BS%%%b < nul)
pause > nul
)
@echo关闭
延迟扩展
对于('echo prompt$H^ | cmd')中的/f%%A,请设置BS=%%A
设置“string=XA THEWORDIZPAT”
对于(0,1,14)do中的/L%%A(
对于(“!string:~%%A,1!”)中的/f“tokens=*delims=X”%%b,请执行以下操作(
设置/p=%BS%%%bnul
)

www.dostips.com上的论坛上有一个输入,空格键的值不会与输出一起屏蔽

我正在学习编码的每一步。因此,我在发布我的消息后看到,disabledelayedexpa n sion一词中缺少一个字母n。我改变了我的代码,但没有市长的改变来解决我的需要。不清楚你在问什么,所以请改进你的描述;你想要的是什么?实际上发生了什么?2.
endlocal
忽略参数,它只恢复最近的
setlocal
之前的状态;3.
goto:main
永远不会执行,因为之前有一个
goto:eof
(交换它们?);4.我想你不想马上从
:葡萄柚
转到
:main
;如果我是对的,您需要在
:grapefrait
块的末尾插入
goto:eof
;5.我想您打算在
set/a
中使用模运算符;如果我是对的,您需要将
%
增加一倍;带set/a的模运算符已更改为10%%3,因此var[10]计数器也将更改为var[1]。必须提供goto:eof,以便:main循环不会在最后一步再次重复。通过:main循环有一个输出,因此它被执行。我的问题仍然是,如果我使用set token=A THEWORDIZPAT提供%token%,则提示输出为A THEWORDIZPAT,而不是预期的A THEWORDIZPAT。缺少空格。是的,
:main
已执行,但我想在您希望的时间不会执行;当前执行顺序是:对于/l迭代的每个
,执行
:grapefrait
:main
;然后终止执行(
goto:eof
);这真的是您想要的吗?如果不添加goto:eof命令,则被调用的标签会回显%0两次。第一个是标签,第二个是文件名本身。在:grapefrait标签中,for/l迭代是计数器循环中的%1,也称为额外的第二次。输出为THEWORDIZPATT,最后一个输出为额外的T。因此,是的,我真的想要goto:eof