标题: [文本处理] 字符串替换的批处理可否用嵌套变量一次解决? [打印本页]
作者: artwen 时间: 2013-2-4 09:16 标题: 字符串替换的批处理可否用嵌套变量一次解决?
各位高手,初学批处理,有问题见下:
举个例子,我有一段文字1\2\1\2,想通过指定的方法变成1/1,写了如下代码- @echo off & setlocal enabledelayedexpansion
- set a=1\2\1\2
- set b=\2
- echo !!a:%b%=!:\=^/!
- 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
下面的可以:- @echo off & setlocal enabledelayedexpansion
- for /f "delims=" %%i in ('dir /b /a-d /s') do (
- set "str=%%~dpni"
- echo !str:%cd%=!
- )
- 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://bbs.bathome.net/) |
Powered by Discuz! 7.2 |