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

[文本处理] 哪位前辈指点小弟一下批处理修改变量的内容

请教一下,在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

  1. set star1=A^*1,B^*1,D^*1
复制代码
  1. set star2=A^*2,B^*2
复制代码
问题解决后,请在标题前面注明[已解决],并给回答者加分——化繁为简,提高工作效率!

TOP

  1. @echo off
  2. set "STR1=A 2 B 2"
  3. for /f "tokens=1-4" %%i in ("%STR1%") do (
  4.     set "STR2=%%i*%%j,%%k*%%l"
  5. )
  6. echo %STR2%
  7. pause
复制代码

TOP

谢谢两位前辈的回复!

Linuxer 老兄的没看明白!

DAIC老兄的可行,但如何根据任意长度的进行处理了呢,示例中只能处理固定的4个字符组成的。

TOP

  1. @echo off
  2. set "STR1=A 1 B 2 C 3 D 4 E 5 F 6 G"
  3. set "STR2="
  4. call :_calc "%STR1%"
  5. echo STR2 = %STR2%
  6. pause
  7. goto :EOF
  8. :_calc
  9. (
  10. for /f "tokens=1,2,*" %%i in ("%~1") do (
  11. if "%%j" EQU "" echo 输入参数不成对 & goto :EOF
  12.     IF "%STR2%" EQU "" (
  13.     set "STR2=%STR2%%%i*%%j"
  14.     ) else (
  15.     set "STR2=%STR2%,%%i*%%j"
  16.   )
  17.     if "%%k" NEQ "" call :_calc "%%k"
  18. )
  19. goto :EOF
  20. )
复制代码

TOP

非常感谢"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

TOP

回复 6# swallowcn


   
客气了,大家一起学习哈。我对这个也不是很熟悉,论坛里面高手如云,与之相比我只能算新手,你说的要求,其实里面已经给出答案了,你就把不成对的那个判断改成默认乘1就可以了。
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set "STR1=A 1 B 2 C 3 D 4 E 5 F 6 G"
  4. set "STR2="
  5. call :_calc "%STR1%"
  6. echo STR2 = %STR2%
  7. pause
  8. goto :EOF
  9. :_calc
  10. (
  11.   for /f "tokens=1,2,*" %%i in ("%~1") do (
  12.       set "Mul=%%j"
  13.       if not defined !Mul! set "Mul=1"
  14.       IF "%STR2%" EQU "" (
  15.         set "STR2=%STR2%%%i*!Mul!"
  16.       ) else (
  17.         set "STR2=%STR2%,%%i*!Mul!"
  18.       )
  19.       if "%%k" NEQ "" call :_calc "%%k"
  20.   )
  21.   goto :EOF
  22. )
复制代码

TOP

回复 7# amwfjhh
  1. @echo off
  2. set "STR1=A 1 B 2 C 3 D 4 E 5 F 6 G"
  3. set "STR2= "
  4. call :_calc "%STR1%"
  5. echo STR2 = %STR2:~2%
  6. pause
  7. goto :EOF
  8. :_calc
  9. for /f "tokens=1,2,*" %%i in ("%~1") do (
  10.         set "STR2=%STR2%,%%i*%%j"
  11.         call :_calc "%%k"
  12. )
  13. if "%STR2:~-1%" == "*" set "STR2=%STR2%1"
复制代码

TOP

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set "STR1=A 1 B 2 C 3 D 4 E 5 F 6 G"
  4. set "STR2= "
  5. for %%a in (%STR1% 1) do (
  6.         if defined s (
  7.                 set "STR2=!STR2!,!s!*%%a"
  8.                 set "s="
  9.         ) else set "s=%%a"
  10. )
  11. echo,%STR2:~2%
  12. pause
复制代码

TOP

怎么回事

TOP

标题

回复 9# apang
   
妙啊,最后取值偏移~2是否多了?不在电脑前,但看代码应该是多截了一个字符。

TOP

有个空格,手机上不易看清。

TOP

谢谢大家,我来试验一下!好感动,有这么多前辈为帮我。

TOP

"apang "前辈,谢谢您的回复。

您的处理方法的结果是我想要的结果,但能否再请教一下,如何将

echo,%STR2:~2%
这个的显示结果赋给另一个变量STR3呢,请大侠们指教一下。如果把这个问题解决了就可以结贴了。

TOP

回复 14# swallowcn
  1. set "STR3=%STR2:~2%"
复制代码

TOP

返回列表