找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 21415|回复: 8

[文本处理] 批处理在for中使用call有点不明白

[复制链接]
发表于 2021-8-4 18:09:03 | 显示全部楼层 |阅读模式
  1. @echo off
  2. for /l %%a in (100 1 199) do (set var=%%a&call echo %%var:~1%%)
  3. pause>nul
复制代码
这个代码中,如果把&去掉,程序不能执行,直接echo %%a~%%好像也不行,想问问高手,这是为啥?
发表于 2021-8-4 19:43:44 | 显示全部楼层
因为&会让批处理以为for /l %%a in (100 1 199) do (set var=%%a和call echo %%var:~1%%)是两个不同的命令
发表于 2021-8-4 19:44:01 | 显示全部楼层
可以在&的前面加^
发表于 2021-8-4 22:25:55 | 显示全部楼层
本帖最后由 yakeyun 于 2021-8-4 22:27 编辑

回复 1# non1979cn


      do后面既然括起来就是一个整句,如果后面改成echo,%%a,就可以看到输出是100~199。而原来的代码本身的输出结果是00~99,所以就可以明白后面的代码是把输出结果做了一个处理:把输出结果只取第二位及后面的部分。
      由于变量值不能直接处理,所以需要先用set赋值,然后再进行处理,所以才会有连接符出现,就是先用输出结果赋值,然后再提取数据。
发表于 2021-8-5 10:15:56 | 显示全部楼层
回复 1# non1979cn


建议不要使用那种糟糕的代码风格,改成这样是否比较容易看清楚:
  1. @echo off
  2. for /l %%a in (100 1 199) do (
  3.     set var=%%a
  4.     call echo %%var:~1%%
  5. )
  6. pause
复制代码
发表于 2021-8-5 13:56:11 | 显示全部楼层
本帖最后由 cmd1152 于 2021-8-5 16:49 编辑

代码有一点点问题,帮你改一下(Windows7 专业版 测试没有问题)
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /l %%a in (100 1 199) do (
  4.     set var=%%a
  5.      call echo;!var:~1!
  6. )
  7. pause
复制代码
发表于 2021-8-5 15:51:49 | 显示全部楼层
回复 6# cmd1152
1楼、5楼的代码没什么问题啊!不需要修改。
发表于 2021-8-5 16:04:31 | 显示全部楼层
回复 7# qixiaobin0715


   
%%var:~1%%
发表于 2021-8-5 16:06:17 | 显示全部楼层
回复 8# cmd1152
简单,你可以自己运行一下代码。
补习一下call的用法。
变量延迟也可用call
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-20 19:55 , Processed in 0.032810 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表