标题: [其他] [已解决]call setlocal enabledelayedexpansion里生成的变量无法返回值 [打印本页]
作者: yunyan100 时间: 2017-12-27 16:07 标题: [已解决]call setlocal enabledelayedexpansion里生成的变量无法返回值
本帖最后由 yunyan100 于 2017-12-28 23:37 编辑
rt,是这样的,call下面的时候有一个变量pa,是路径,通过下面这段代码,将这段路径进行修改,我用got :eof(知它不传值)返回的话,pa这个值没有变,所以我用call回去,这个pa的值才变了,所以请问下各位,pa这个量我明明有改,但回去的时候怎么还是传来之前的量(包括在这里生成的新变量也无)?- setlocal enabledelayedexpansion
- set "src=%patt%\"&set "dst="
- for /f "delims=" %%a in ("%pa%") do ( set "str=%%a"&set "pa=!str:%src%=%dst%!")
- setlocal disabledelayedexpansion
- call %1 "%pa%"
复制代码
作者: 0000 时间: 2017-12-28 21:13
>setlocal /?
开始批处理文件中环境改动的本地化操作。在执行 SETLOCAL 之后
所做的环境改动只限于批处理文件。要还原原先的设置,必须执
行 ENDLOCAL。达到批处理文件结尾时,对于该批处理文件的每个
尚未执行的 SETLOCAL 命令,都会有一个隐含的 ENDLOCAL 被执行。
还有你在call什么?
尽管这样,利用预处理机制也可以传回变量- call :test "%pa%"
- goto :eof
-
- :test
- set "src=%patt%\"&set "dst="
- setlocal enabledelayedexpansion
- for /f "delims=" %%a in ("%pa%") do (
- set "str=%%a"
- set "pa=!str:%src%=%dst%!"
- )
- endlocal&set "str=%str%"&set "pa=%pa%"
- goto :eof
复制代码
作者: yunyan100 时间: 2017-12-28 23:17
本帖最后由 yunyan100 于 2017-12-28 23:18 编辑
回复 2# 0000
首先非常感谢你,按你的成功了,因为setlocal disabledelayedexpansion这句是结束延时,所以我这是这句,你发出来的是endlocal 且重设置下变量(这才是关键吗),难道就是这两个的原因?因为不禁止setlocal enabledelayedexpansion这东西,会影响后面的变量, 所以我一直用的是setlocal disabledelayedexpansion,非常感谢- call :ltty
- set runexe=%pa%&set ne=%pax%&set name=%pay%
复制代码
- :ltty
- ::下级文件夹路径修改
- set "src=%patt%\"&set "dst="
- setlocal enabledelayedexpansion
- for /f "delims=" %%a in ("%pa%") do (set "str=%%a"&set "pax=%%~na"&set "pay=%%~nxa"&set "pa=!str:%src%=%dst%!")
- endlocal&set "pax=%pax%"&set "pay=%pay%"&set "pa=%pa%"
- goto :eof
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |