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

[文本处理] [已解决]批处理怎么从配置文件中读取一个数值作为文件名查找的参数?

[复制链接]
发表于 2016-1-4 14:51:17 | 显示全部楼层 |阅读模式
本帖最后由 skyflykyo 于 2016-1-5 08:45 编辑

想把%ITEM2_VALUE%的值作为参数,如果%ITEM1_VALUE%的目录下文件名有包含%ITEM2_VALUE%的文件,则拷贝到C:\aa
现在下面的代码可以读到%ITEM1_VALUE%和%ITEM2_VALUE%的值,但是无法将他们作为查找的参数,求大神指点
  1. @echo off
  2. :begin
  3. CALL readconfig ITEM1 ITEM1_VALUE
  4. CALL readconfig ITEM2 ITEM2_VALUE
  5. echo %ITEM1_VALUE%
  6. echo %ITEM2_VALUE%
  7. cd %ITEM1_VALUE%
  8. if exist *(%ITEM2_VALUE%)* copy *(%ITEM2_VALUE%)* C:\aa
  9. pause
复制代码
另外如果该脚本在C盘运行,%ITEM1_VALUE%的值是在D盘的话,cd %ITEM1_VALUE%这条命令无效。这是为什么呢?

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

 楼主| 发表于 2016-1-4 14:53:37 | 显示全部楼层
这是readconfig.bat和jnz.ini的代码
  1. readconfig.bat:
  2. CALL :readconfig %1 %2

  3. :readconfig
  4.   for /f "skip=1 tokens=1,2 delims==" %%a IN (jvz.ini) Do if %1==%%a set %2=%%b & @echo readconfig get %%a, value is %%b
  5.   goto :eof

  6. jnz.ini
  7. [Common]
  8. ITEM1=C:\bb
  9. ITEM2=2206
复制代码
发表于 2016-1-4 15:13:54 | 显示全部楼层
配置文件到底是 jvz.ini 还是 jnz.ini
发表于 2016-1-4 15:15:28 | 显示全部楼层
另外如果该脚本在C盘运行,%ITEM1_VALUE%的值是在D盘的话,cd %ITEM1_VALUE%这条命令无效。这是为什么呢?

cd /d %ITEM1_VALUE%
发表于 2016-1-4 15:15:40 | 显示全部楼层
  1. for /f "delims=" %%i in ('dir /a-d /b "*%ITEM2_VALUE%*" "%ITEM1_VALUE%"') do copy /y "%%~fi" "C:\aa"
复制代码
  1. cd /d "其他盘符路径"
复制代码
 楼主| 发表于 2016-1-4 15:26:32 | 显示全部楼层
回复 3# DAIC 写错了,是jvz.ini
 楼主| 发表于 2016-1-4 15:35:10 | 显示全部楼层
回复 5# 回家路上
提示找不到文件  但是文件夹下确实有文件名包含相应字符串的文件
发表于 2016-1-4 16:50:31 | 显示全部楼层
  1. @echo off
  2. CALL readconfig ITEM1 ITEM1_VALUE
  3. CALL readconfig ITEM2 ITEM2_VALUE
  4. echo +++++++%ITEM1_VALUE%+++++++
  5. echo +++++++%ITEM2_VALUE%+++++++
  6. cd /d "%ITEM1_VALUE%"
  7. echo ------- dir 1 -------
  8. dir /b /a-d
  9. echo ------- dir 2 -------
  10. dir /b /a-d "*%ITEM2_VALUE%*"
  11. for /f "delims=" %%i in ('dir /a-d /b "*%ITEM2_VALUE%*"') do (
  12.     echo copy /y "%%~fi" "C:\aa"
  13.     copy /y "%%~fi" "C:\aa"
  14. )
  15. pause
复制代码
执行这个代码,把结果发出来看看。
 楼主| 发表于 2016-1-4 20:55:04 | 显示全部楼层
回复 8# DAIC
发表于 2016-1-4 23:06:16 | 显示全部楼层
回复 9# skyflykyo


从第5、6两行可以看出取到的变量结尾有多余的空格,修改代码:
readconfig.bat
  1. @echo off
  2. for /f "skip=1 tokens=1,2 delims==" %%a in (jvz.ini) do (
  3.     if %1==%%a (
  4.         set "%2=%%b"
  5.         echo readconfig get %%a, value is %%b
  6.     )
  7. )
复制代码

评分

参与人数 1技术 +1 收起 理由
Batcher + 1 乐于助人

查看全部评分

 楼主| 发表于 2016-1-5 08:44:58 | 显示全部楼层
回复 10# DAIC


    太感谢了,已经搞定
 楼主| 发表于 2016-1-5 09:18:07 | 显示全部楼层
回复 10# DAIC


    请我如果要进入C:\aa下把复制过去的文件删掉 该怎么写呢
发表于 2016-1-5 09:28:45 | 显示全部楼层
回复 12# skyflykyo


进入的命令是 cd /d "C:\aa"
删除文件的命令的 del
你自己先试试吧
 楼主| 发表于 2016-1-5 13:10:37 | 显示全部楼层
回复 13# DAIC
已经搞定了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-18 06:15 , Processed in 0.020968 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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