Board logo

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

作者: artwen    时间: 2013-2-4 09:16     标题: 字符串替换的批处理可否用嵌套变量一次解决?

各位高手,初学批处理,有问题见下:

举个例子,我有一段文字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。我的嵌套变量有什么不对吗?
另,我这里只想用嵌套变量一次解决,不想通过几段代码解决
谢谢!
作者: artwen    时间: 2013-2-4 09:24

我知道这里可以分次解决

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

但怎么通过多层嵌套一行就解决问题?
作者: artwen    时间: 2013-2-4 10:12

还有个问题

假若我有个文件夹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

下面的可以:
  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 之类的,只能是环境变量。
作者: artwen    时间: 2013-2-6 01:03

回复 4# 悬崖之树

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


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

所以我在一楼的代码的第4行,第一个冒号进行的替换可以识别;而第二个冒号就无法识别了。对吗?
作者: artwen    时间: 2013-2-11 01:51

大过年的顶起!




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