【问题标题】:how to make variables preserved after endlocal command [duplicate]如何在endlocal命令后保留变量[重复]
【发布时间】:2013-03-28 17:42:28
【问题描述】:

谢谢内特。它有效。
但现在我需要此脚本的输出变量以供以后使用。
我需要2个输出。首先是计数变量作为整数输出,其次是字符串变量,它等于“word”中的最后一个字符串字符。
所以,我需要这 2 个变量,正如您在“按任意键继续...”之前在完成脚本的最后一行中看到的那样。
1 个最后一个整数变量和 1 个最后一个字符串变量。

我需要这 2 个变量,以便以后在此脚本中编写脚本。
我怎么能拥有它? 这是一个从昨天开始工作的脚本。

@ECHO OFF
:input
set /p word=input your word:
if not defined word goto input
(ECHO %word%)> tempfile.txt
FOR %%x IN (tempfile.txt) DO ( SET /A lenght=%%~zx - 2 )

del tempfile.txt
echo %word% got %lenght% characters
setlocal enabledelayedexpansion

for /l %%m in (1,1,!lenght!) do (
  set /a count=%%m
  set /a index=%%m-1
  call echo !count! %%word:~!index!,1%%
) 

(call echo %%word:~!index!,1%%)>tf.txt


for /f "tokens=*" %%a in (tf.txt) do (
set line=%%a
set char=!line:~0,1!

)

pause

echo %count% %char%

endlocal

pause

【问题讨论】:

  • 我会的,你是对的。谢谢
  • 现在别人理解好不好?
  • 论坛软件确实阻碍了我更好地格式化您的问题。请自己做。
  • 看看这个完成的代码。当 endlocal 结束时工作。我有 2 个变量(最后一个整数和最后一个字符串)。但如果我在创建 tf.txt 后放置 endlocal 则不起作用。如果在创建 tf.txt 后 endlocal 在下一行,你能以这种方式工作吗?

标签: batch-file environment-variables


【解决方案1】:

here 记录了许多方法来展示如何做到这一点,但是 endlocal & set global=local 是我最喜欢的。

根据我认为你想要的来判断......

setlocal enabledelayedexpansion
for /l %%m in (1,1,!lenght!) do (
    set /a count=%%m
    set /a index=%%m-1
    call echo !count! %%word:~!index!,1%%
    set laststring=%word:~!index!,1%
) 
(
    endlocal
    set count=%count%
    set laststring=%laststring%
)

【讨论】:

  • 啊,但是endlocak&set global=%local% 更有可能产生预期的结果... :)
  • 有人可以按照我的要求完成这个脚本吗,因为我不知道?
  • @Zvonimir 你想保留什么变量,你想把它们保存成什么变量?
  • 阅读此处SO:Make an environment variable survive ENDLOCAL 了解不同的解决方案
  • 这种方法在很多情况下都会失败。有关更可靠的方法,请参阅stackoverflow.com/q/3262287/1012053 的答案。
【解决方案2】:

试试这个技术拆setlocal enabledelayedexpansion/endlocal的墙:

@echo off&setlocal
set "word=abcdefghij"
set /a lenght=10

for /l %%m in (1,1,%lenght%) do (
    set /a $count=%%m
    set /a index=%%m-1
    setlocal enabledelayedexpansion
    call echo !$count! %%word:~!index!,1%%
    call set "$laststring=%%word:~!index!,1%%"
    for /f %%i in ('set $') do (if "!"=="" endlocal)& set "%%i"
)
echo( 
echo !$count! !$laststring!
echo %$count% %$laststring%

(source)

【讨论】:

  • 我只能说,你又成功了。你睡在书本上而不是枕头上吗?你是天才。如果您可以通过邮件向我发送您的每段代码的简要说明,我将非常感谢您。邮件是 zeusaluminium@gmail.com 。
  • 我的意思是彻底而缓慢的解释。我在想“简短”=缓慢而彻底,所以输入谷歌并发现我使用这个词的目的是错误的:)。每天学习:)
  • delayed expansion 不是“慢”的意思,而是“稍后”的意思:)
  • 如果 i enebledelayedexpansion 这是否意味着所有带 !(感叹号)的变量将同时在 enableelayedexpansion 块中的 eni 位置发展??
  • 延迟扩展意味着,解析器不解释!variable!s。示例:@echo off setlocal set "uglyvar=^^&!&dir" setlocal enabledelayedexpansion echo !uglyvar! pause echo %uglyvar% ``
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-28
  • 1970-01-01
  • 2018-10-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多