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

[文本处理] 字符串替换的批处理可否用嵌套变量一次解决?

[复制链接]
发表于 2013-2-4 09:16:47 | 显示全部楼层 |阅读模式
各位高手,初学批处理,有问题见下:

举个例子,我有一段文字1\2\1\2,想通过指定的方法变成1/1,写了如下代码
  1. @echo off & setlocal enabledelayedexpansion
  2. set a=1\2\1\2
  3. set b=\2
  4. echo !!a:%b%=!:\=^/!
  5. pause
复制代码
最后显示1\1:\=/而不是1/1。我的嵌套变量有什么不对吗?
另,我这里只想用嵌套变量一次解决,不想通过几段代码解决
谢谢!
 楼主| 发表于 2013-2-4 09:24:58 | 显示全部楼层
我知道这里可以分次解决

@echo off & setlocal enabledelayedexpansion
set a=1\2\1\2
set b=\2
set c=!a:%b%=!
echo %c:\=^/%
pause

但怎么通过多层嵌套一行就解决问题?
 楼主| 发表于 2013-2-4 10:12:33 | 显示全部楼层
还有个问题

假若我有个文件夹D:\abc,里面有许多文件、子文件夹(子文件夹中也有文件),比如
D:\abc\1.txt
D:\abc\def\2.txt
等等……
我想把他们显示分别为1和def\2等,写了如下代码(假设批处理文件也在D:\abc),为何不行?

@echo off & setlocal enabledelayedexpansion
for /f "delims=" %%i in ('dir /b /a-d /s') do (
echo !%%~dpni:%cd%\=!)
pause
发表于 2013-2-5 19:31:32 | 显示全部楼层
下面的可以:
  1. @echo off & setlocal enabledelayedexpansion
  2. for /f "delims=" %%i in ('dir /b /a-d /s') do (
  3.      set "str=%%~dpni"
  4.      echo !str:%cd%=!
  5. )
  6. pause
复制代码
因为字符串替换时的被替换的变量不能是%%i和%1 之类的,只能是环境变量。
 楼主| 发表于 2013-2-6 01:03:54 | 显示全部楼层
回复 4# 悬崖之树

   
因为字符串替换时的被替换的变量不能是%%i和%1 之类的,只能是环境变量。
悬崖之树 发表于 2013-2-5 19:31


换句话说,你看是不是这个意思,在进行字符串替换时,被操作的字符串变量只能是自定义的变量(如%str%),不可是命令符自带的变量(如%%~dpni)?

所以我在一楼的代码的第4行,第一个冒号进行的替换可以识别;而第二个冒号就无法识别了。对吗?
 楼主| 发表于 2013-2-11 01:51:16 | 显示全部楼层
大过年的顶起!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-19 23:12 , Processed in 0.014031 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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