标题: [文本处理] 哪位前辈指点小弟一下批处理修改变量的内容 [打印本页]
作者: swallowcn 时间: 2014-11-13 07:58 标题: 哪位前辈指点小弟一下批处理修改变量的内容
请教一下,在dos批处理下如何实现如下功能
1.变量STR1=A 1 B 1 C 1 D1
如果何把它格式处理成STR2=A*1,B*1,C*1,D*1
2.变量STR1=A 2 B 2
如何把它处理成STR2= A*2,B*2
请问这样如何能实现?
谢谢大家了
注:系统为windows 7
作者: Linuxer 时间: 2014-11-13 09:28
复制代码
复制代码
作者: DAIC 时间: 2014-11-13 10:00
- @echo off
- set "STR1=A 2 B 2"
- for /f "tokens=1-4" %%i in ("%STR1%") do (
- set "STR2=%%i*%%j,%%k*%%l"
- )
- echo %STR2%
- pause
复制代码
作者: swallowcn 时间: 2014-11-13 20:18
谢谢两位前辈的回复!
Linuxer 老兄的没看明白!
DAIC老兄的可行,但如何根据任意长度的进行处理了呢,示例中只能处理固定的4个字符组成的。
作者: amwfjhh 时间: 2014-11-14 10:22
- @echo off
- set "STR1=A 1 B 2 C 3 D 4 E 5 F 6 G"
- set "STR2="
-
- call :_calc "%STR1%"
- echo STR2 = %STR2%
- pause
- goto :EOF
-
- :_calc
- (
- for /f "tokens=1,2,*" %%i in ("%~1") do (
- if "%%j" EQU "" echo 输入参数不成对 & goto :EOF
- IF "%STR2%" EQU "" (
- set "STR2=%STR2%%%i*%%j"
- ) else (
- set "STR2=%STR2%,%%i*%%j"
- )
- if "%%k" NEQ "" call :_calc "%%k"
- )
-
- goto :EOF
- )
复制代码
作者: swallowcn 时间: 2014-11-14 14:45
非常感谢"amwfjhh "前辈的回复。
这个批处理已经能解决我90%的问题。
但还有如下情况,处理不了:
1.STR1=A 时,我希望的结果是STR2=A*1
2.STR1=A 1 B 2 C 3 D 4 E 5 F 6 G 时,我希望的结果是: STR2=A*1,B*2, C*3, D*4,E*5,F*6,G*1
就是字符后边一位如果不是数字,就将其设为: 字母*1
作者: amwfjhh 时间: 2014-11-14 17:20
回复 6# swallowcn
客气了,大家一起学习哈。我对这个也不是很熟悉,论坛里面高手如云,与之相比我只能算新手,你说的要求,其实里面已经给出答案了,你就把不成对的那个判断改成默认乘1就可以了。- @echo off
- setlocal enabledelayedexpansion
-
- set "STR1=A 1 B 2 C 3 D 4 E 5 F 6 G"
- set "STR2="
-
- call :_calc "%STR1%"
- echo STR2 = %STR2%
- pause
- goto :EOF
-
- :_calc
- (
- for /f "tokens=1,2,*" %%i in ("%~1") do (
- set "Mul=%%j"
- if not defined !Mul! set "Mul=1"
- IF "%STR2%" EQU "" (
- set "STR2=%STR2%%%i*!Mul!"
- ) else (
- set "STR2=%STR2%,%%i*!Mul!"
- )
- if "%%k" NEQ "" call :_calc "%%k"
- )
-
- goto :EOF
- )
复制代码
作者: apang 时间: 2014-11-14 18:36
回复 7# amwfjhh - @echo off
-
- set "STR1=A 1 B 2 C 3 D 4 E 5 F 6 G"
- set "STR2= "
-
- call :_calc "%STR1%"
- echo STR2 = %STR2:~2%
- pause
- goto :EOF
-
- :_calc
- for /f "tokens=1,2,*" %%i in ("%~1") do (
- set "STR2=%STR2%,%%i*%%j"
- call :_calc "%%k"
- )
- if "%STR2:~-1%" == "*" set "STR2=%STR2%1"
复制代码
作者: apang 时间: 2014-11-14 18:45
- @echo off
- setlocal enabledelayedexpansion
-
- set "STR1=A 1 B 2 C 3 D 4 E 5 F 6 G"
- set "STR2= "
-
- for %%a in (%STR1% 1) do (
- if defined s (
- set "STR2=!STR2!,!s!*%%a"
- set "s="
- ) else set "s=%%a"
- )
-
- echo,%STR2:~2%
- pause
复制代码
作者: ads350668398 时间: 2014-11-14 19:01
怎么回事
作者: amwfjhh 时间: 2014-11-14 19:43 标题: 标题
回复 9# apang
妙啊,最后取值偏移~2是否多了?不在电脑前,但看代码应该是多截了一个字符。
作者: amwfjhh 时间: 2014-11-14 19:46
有个空格,手机上不易看清。
作者: swallowcn 时间: 2014-11-17 09:13
谢谢大家,我来试验一下!好感动,有这么多前辈为帮我。
作者: swallowcn 时间: 2014-11-17 15:56
"apang "前辈,谢谢您的回复。
您的处理方法的结果是我想要的结果,但能否再请教一下,如何将
echo,%STR2:~2%
这个的显示结果赋给另一个变量STR3呢,请大侠们指教一下。如果把这个问题解决了就可以结贴了。
作者: DAIC 时间: 2014-11-17 16:03
回复 14# swallowcn 复制代码
作者: swallowcn 时间: 2014-11-18 11:26
谢谢“Linuxer , DAIC ,amwfjhh ,apang ,350668398 ”几位前辈的回复,结贴。
作者: DAIC 时间: 2014-11-18 12:47
回复 16# swallowcn
问题解决后,请编辑顶楼帖子在标题前面注明[已解决],并给回答者加分。
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |