标题: [文本处理] 批处理在for中使用call有点不明白 [打印本页]
作者: non1979cn 时间: 2021-8-4 18:09 标题: 批处理在for中使用call有点不明白
- @echo off
- for /l %%a in (100 1 199) do (set var=%%a&call echo %%var:~1%%)
- pause>nul
复制代码
这个代码中,如果把&去掉,程序不能执行,直接echo %%a~%%好像也不行,想问问高手,这是为啥?
作者: cmd1152 时间: 2021-8-4 19:43
因为&会让批处理以为for /l %%a in (100 1 199) do (set var=%%a和call echo %%var:~1%%)是两个不同的命令
作者: cmd1152 时间: 2021-8-4 19:44
可以在&的前面加^
作者: yakeyun 时间: 2021-8-4 22:25
本帖最后由 yakeyun 于 2021-8-4 22:27 编辑
回复 1# non1979cn
do后面既然括起来就是一个整句,如果后面改成echo,%%a,就可以看到输出是100~199。而原来的代码本身的输出结果是00~99,所以就可以明白后面的代码是把输出结果做了一个处理:把输出结果只取第二位及后面的部分。
由于变量值不能直接处理,所以需要先用set赋值,然后再进行处理,所以才会有连接符出现,就是先用输出结果赋值,然后再提取数据。
作者: Batcher 时间: 2021-8-5 10:15
回复 1# non1979cn
建议不要使用那种糟糕的代码风格,改成这样是否比较容易看清楚:- @echo off
- for /l %%a in (100 1 199) do (
- set var=%%a
- call echo %%var:~1%%
- )
- pause
复制代码
作者: cmd1152 时间: 2021-8-5 13:56
本帖最后由 cmd1152 于 2021-8-5 16:49 编辑
代码有一点点问题,帮你改一下(Windows7 专业版 测试没有问题)- @echo off
- setlocal enabledelayedexpansion
- for /l %%a in (100 1 199) do (
- set var=%%a
- call echo;!var:~1!
- )
- pause
复制代码
作者: qixiaobin0715 时间: 2021-8-5 15:51
回复 6# cmd1152
1楼、5楼的代码没什么问题啊!不需要修改。
作者: cmd1152 时间: 2021-8-5 16:04
回复 7# qixiaobin0715
作者: qixiaobin0715 时间: 2021-8-5 16:06
回复 8# cmd1152
简单,你可以自己运行一下代码。
补习一下call的用法。
变量延迟也可用call
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |