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

[文件操作] 批处理命令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呢?

回复 8# saint_Zuo


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

TOP

回复 7# awk


    谢谢了。终于有了明确的答案!

TOP

回复 6# saint_Zuo


你可以建议微软把这个功能加到下一个版本的系统里面,在这前之前还是老实写两行吧。

TOP

回复 4# lovedjsn


    我的意思是只需一句set就能完成对%%~ni的字符截取,麻烦再帮忙看看。

TOP

回复 4# lovedjsn
你在哪里看到set这样的用法:set /a var==!var:~0,2!

TOP

set var=%%i
set /a var==!var:~0,2!
这样不就行了?????

TOP

1、字符串截取不能直接用于for的变量
2、for的变量本身就具备变量延迟

TOP

这个还真不会,帮顶吧。

TOP

返回列表