Board logo

标题: [文件操作] 批处理命令set中的字符截取、替换不能直接用于for中的变量吗? [打印本页]

作者: saint_Zuo    时间: 2011-12-26 11:29     标题: 批处理命令set中的字符截取、替换不能直接用于for中的变量吗?

  1. setlocal enabledelayedexpansion
  2. for /r  %%i in (*.txt) do set var=!%%~ni:~0,2! & echo !var!
  3. for /r  %%i in (*.txt) do set var=%%~ni &set var=!var:~0,2!& echo !var!
复制代码
(1)请教第一个for /r语句中为什么不能用一句set来截取%%~ni中的前两个字符呢?改为var=%%%~ni:~0,2%也不对,会报错,改为var=%%~ni:~0,2还是不对。也就是说set语句中的字符截取、替换不能直接用于for中的%%i、%%~ni等变量吗?
(2)启动了变量延迟之后为什么不需要将%%i改为!!i呢?
作者: hacker85    时间: 2011-12-26 12:11

这个还真不会,帮顶吧。
作者: awk    时间: 2011-12-26 12:12

1、字符串截取不能直接用于for的变量
2、for的变量本身就具备变量延迟
作者: lovedjsn    时间: 2011-12-26 14:37

set var=%%i
set /a var==!var:~0,2!
这样不就行了?????
作者: lxzzr    时间: 2011-12-27 12:14

回复 4# lovedjsn
你在哪里看到set这样的用法:set /a var==!var:~0,2!
作者: saint_Zuo    时间: 2011-12-28 11:10

回复 4# lovedjsn


    我的意思是只需一句set就能完成对%%~ni的字符截取,麻烦再帮忙看看。
作者: awk    时间: 2011-12-28 15:37

回复 6# saint_Zuo


你可以建议微软把这个功能加到下一个版本的系统里面,在这前之前还是老实写两行吧。
作者: saint_Zuo    时间: 2011-12-28 15:44

回复 7# awk


    谢谢了。终于有了明确的答案!
作者: awk    时间: 2011-12-28 15:45

回复 8# saint_Zuo


其实吧,3楼第一句话已经非常明确了。




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2