找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 24074|回复: 4

[文本处理] BAT批处理怎么把两组等长的字符串一一对应起来,实现其他操作?

[复制链接]
发表于 2014-3-11 12:15:59 | 显示全部楼层 |阅读模式
example:

  1. @echo off
  2. set a=1 2 3
  3. set c=x y z
  4. pushd d:
  5. for %%m in (%a%) do (
  6. for %%n in (%c%) do (
  7. echo %%m
  8. echo %%n
  9. md tmp\%%m_%%n
  10. pause
  11. )
  12. )
  13. pause
复制代码
本意是想创建1_x 2_y 3_z这三个文件夹,但是运行后1 2 3分别循环三次,创建了九个文件夹,怎么修改?
上面只是个例子,目的是想1和x搭配,2和y搭配,3和z搭配,通过这种方式来完成其他复杂操作,第一次求助,求大神们帮助解决!!!
发表于 2014-3-11 18:35:29 | 显示全部楼层
在powershell中,
可以把123放入一个数组,xyz放入另一个数组,
也可以把123放入一个队列,xyz放入另一个队列,
剩下的就简单了
发表于 2014-3-11 19:05:41 | 显示全部楼层
本帖最后由 apang 于 2014-3-11 19:16 编辑
  1. @echo off
  2. set a=1 2 3
  3. set c=x y z
  4. pushd d:\
  5. for %%m in (%a%) do (
  6.     set /a i+=1,j=0
  7.     (for %%n in (%c%) do (
  8.         set /a j+=1,"1/(i-j)" || echo,md "tmp\%%m_%%n"
  9.     )) 2>nul
  10. )
  11. pause
复制代码
或者这样,减少点循环次数:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set a=1 2 3
  4. set c=x y z
  5. pushd d:\
  6. for %%m in (%a%) do set /a i+=1 & set ".!i!=%%m"
  7. for %%n in (%c%) do (
  8.     set /a j+=1
  9.     for %%a in (!j!) do echo,md "tmp\!.%%a!_%%n"
  10. )
  11. pause
复制代码

评分

参与人数 1技术 +1 收起 理由
zhksun + 1 两种方法都可以,并且第二种方法有改进;

查看全部评分

 楼主| 发表于 2014-3-12 13:48:18 | 显示全部楼层
3楼两种方法运行后都是正确的;对于第二种方法我有点疑惑,请帮忙解答,谢谢!
为了区分变量a=1 2 3和下面的i j变量搞混,我改成a=X Y Z,运行后结果是X_x Y_y Z_z,满足需要;
对于第二中方法的第一个循环中set ".!i!=%%m",set后加双引号和变量延迟前加.起到什么效果?第二个循环中j不是数字吗,怎么把变量a中的值传递过去的?请教了
第二种方法挺好,对于新手的我又有点陌生!
 楼主| 发表于 2014-3-12 19:19:48 | 显示全部楼层

[已解决]

本帖最后由 zhksun 于 2014-3-12 21:15 编辑

好像懂了!
set ".!i!=%%m"和"tmp\!.%%a!_%%n"中的.字符不起实质性作用,第一个for把变量a中的元素分别给!1!、!2!、!3!第二个循环中再释放出来;
多谢两位解答,受益匪浅!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-21 01:02 , Processed in 0.025586 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表