[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

  1. @echo off
  2. for /l %%a in (100 1 199) do (set var=%%a&call echo %%var:~1%%)
  3. pause>nul
复制代码
这个代码中,如果把&去掉,程序不能执行,直接echo %%a~%%好像也不行,想问问高手,这是为啥?

因为&会让批处理以为for /l %%a in (100 1 199) do (set var=%%a和call echo %%var:~1%%)是两个不同的命令
梦依旧在,只是,心有余而力渐有不足
年年岁岁花相似,岁岁年年人不同

TOP

可以在&的前面加^
梦依旧在,只是,心有余而力渐有不足
年年岁岁花相似,岁岁年年人不同

TOP

本帖最后由 yakeyun 于 2021-8-4 22:27 编辑

回复 1# non1979cn


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

TOP

回复 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
复制代码
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

本帖最后由 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
复制代码
梦依旧在,只是,心有余而力渐有不足
年年岁岁花相似,岁岁年年人不同

TOP

回复 6# cmd1152
1楼、5楼的代码没什么问题啊!不需要修改。

TOP

回复 7# qixiaobin0715


   
%%var:~1%%
梦依旧在,只是,心有余而力渐有不足
年年岁岁花相似,岁岁年年人不同

TOP

回复 8# cmd1152
简单,你可以自己运行一下代码。
补习一下call的用法。
变量延迟也可用call

TOP

返回列表