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

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

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

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

我知道这里可以分次解决

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

但怎么通过多层嵌套一行就解决问题?

TOP

还有个问题

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

TOP

下面的可以:
  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 之类的,只能是环境变量。
时光荏苒||新陈代谢&&涛声依旧||本性难移

TOP

回复 4# 悬崖之树

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


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

所以我在一楼的代码的第4行,第一个冒号进行的替换可以识别;而第二个冒号就无法识别了。对吗?

TOP

大过年的顶起!

TOP

返回列表