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

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

[复制链接]
发表于 2011-12-26 11:29:37 | 显示全部楼层 |阅读模式
  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呢?
发表于 2011-12-26 12:11:27 | 显示全部楼层
这个还真不会,帮顶吧。
发表于 2011-12-26 12:12:30 | 显示全部楼层
1、字符串截取不能直接用于for的变量
2、for的变量本身就具备变量延迟
发表于 2011-12-26 14:37:34 | 显示全部楼层
set var=%%i
set /a var==!var:~0,2!
这样不就行了?????
发表于 2011-12-27 12:14:45 | 显示全部楼层
回复 4# lovedjsn
你在哪里看到set这样的用法:set /a var==!var:~0,2!
 楼主| 发表于 2011-12-28 11:10:33 | 显示全部楼层
回复 4# lovedjsn


    我的意思是只需一句set就能完成对%%~ni的字符截取,麻烦再帮忙看看。
发表于 2011-12-28 15:37:54 | 显示全部楼层
回复 6# saint_Zuo


你可以建议微软把这个功能加到下一个版本的系统里面,在这前之前还是老实写两行吧。
 楼主| 发表于 2011-12-28 15:44:08 | 显示全部楼层
回复 7# awk


    谢谢了。终于有了明确的答案!
发表于 2011-12-28 15:45:33 | 显示全部楼层
回复 8# saint_Zuo


其实吧,3楼第一句话已经非常明确了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-18 13:18 , Processed in 0.019418 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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