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

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

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搭配,通过这种方式来完成其他复杂操作,第一次求助,求大神们帮助解决!!!

在powershell中,
可以把123放入一个数组,xyz放入另一个数组,
也可以把123放入一个队列,xyz放入另一个队列,
剩下的就简单了
脚本是写给人看的,是写给用户看的,而不是写给机子看的
用户能看懂、会修改的脚本,才是好脚本。
写易懂的powershell脚本帮人解决问题,进而让用户学会自渔,吾所愿也

TOP

本帖最后由 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

评分人数

    • zhksun: 两种方法都可以,并且第二种方法有改进;技术 + 1

TOP

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

TOP

[已解决]

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

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

TOP

返回列表