标题: [文本处理] BAT批处理怎么把两组等长的字符串一一对应起来,实现其他操作? [打印本页]
作者: zhksun 时间: 2014-3-11 12:15 标题: BAT批处理怎么把两组等长的字符串一一对应起来,实现其他操作?
example:- @echo off
- set a=1 2 3
- set c=x y z
- pushd d:
- for %%m in (%a%) do (
- for %%n in (%c%) do (
- echo %%m
- echo %%n
- md tmp\%%m_%%n
- pause
- )
- )
- pause
复制代码
本意是想创建1_x 2_y 3_z这三个文件夹,但是运行后1 2 3分别循环三次,创建了九个文件夹,怎么修改?
上面只是个例子,目的是想1和x搭配,2和y搭配,3和z搭配,通过这种方式来完成其他复杂操作,第一次求助,求大神们帮助解决!!!
作者: PowerShell 时间: 2014-3-11 18:35
在powershell中,
可以把123放入一个数组,xyz放入另一个数组,
也可以把123放入一个队列,xyz放入另一个队列,
剩下的就简单了
作者: apang 时间: 2014-3-11 19:05
本帖最后由 apang 于 2014-3-11 19:16 编辑
- @echo off
- set a=1 2 3
- set c=x y z
- pushd d:\
- for %%m in (%a%) do (
- set /a i+=1,j=0
- (for %%n in (%c%) do (
- set /a j+=1,"1/(i-j)" || echo,md "tmp\%%m_%%n"
- )) 2>nul
- )
- pause
复制代码
或者这样,减少点循环次数:- @echo off
- setlocal enabledelayedexpansion
- set a=1 2 3
- set c=x y z
- pushd d:\
- for %%m in (%a%) do set /a i+=1 & set ".!i!=%%m"
- for %%n in (%c%) do (
- set /a j+=1
- for %%a in (!j!) do echo,md "tmp\!.%%a!_%%n"
- )
- pause
复制代码
作者: zhksun 时间: 2014-3-12 13:48
3楼两种方法运行后都是正确的;对于第二种方法我有点疑惑,请帮忙解答,谢谢!
为了区分变量a=1 2 3和下面的i j变量搞混,我改成a=X Y Z,运行后结果是X_x Y_y Z_z,满足需要;
对于第二中方法的第一个循环中set ".!i!=%%m",set后加双引号和变量延迟前加.起到什么效果?第二个循环中j不是数字吗,怎么把变量a中的值传递过去的?请教了
第二种方法挺好,对于新手的我又有点陌生!
作者: zhksun 时间: 2014-3-12 19:19 标题: [已解决]
本帖最后由 zhksun 于 2014-3-12 21:15 编辑
好像懂了!
set ".!i!=%%m"和"tmp\!.%%a!_%%n"中的.字符不起实质性作用,第一个for把变量a中的元素分别给!1!、!2!、!3!第二个循环中再释放出来;
多谢两位解答,受益匪浅!
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |