Board logo

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

作者: skyflykyo    时间: 2016-1-4 14:51     标题: [已解决]批处理怎么从配置文件中读取一个数值作为文件名查找的参数?

本帖最后由 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%这条命令无效。这是为什么呢?
作者: skyflykyo    时间: 2016-1-4 14:53

这是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
复制代码

作者: DAIC    时间: 2016-1-4 15:13

配置文件到底是 jvz.ini 还是 jnz.ini
作者: DAIC    时间: 2016-1-4 15:15

另外如果该脚本在C盘运行,%ITEM1_VALUE%的值是在D盘的话,cd %ITEM1_VALUE%这条命令无效。这是为什么呢?

cd /d %ITEM1_VALUE%
作者: 回家路上    时间: 2016-1-4 15:15

  1. for /f "delims=" %%i in ('dir /a-d /b "*%ITEM2_VALUE%*" "%ITEM1_VALUE%"') do copy /y "%%~fi" "C:\aa\"
复制代码
  1. cd /d "其他盘符路径"
复制代码

作者: skyflykyo    时间: 2016-1-4 15:26

回复 3# DAIC 写错了,是jvz.ini
作者: skyflykyo    时间: 2016-1-4 15:35

回复 5# 回家路上
提示找不到文件  但是文件夹下确实有文件名包含相应字符串的文件
作者: DAIC    时间: 2016-1-4 16:50

  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
复制代码
执行这个代码,把结果发出来看看。
作者: skyflykyo    时间: 2016-1-4 20:55

回复 8# DAIC
作者: DAIC    时间: 2016-1-4 23:06

回复 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. )
复制代码

作者: skyflykyo    时间: 2016-1-5 08:44

回复 10# DAIC


    太感谢了,已经搞定
作者: skyflykyo    时间: 2016-1-5 09:18

回复 10# DAIC


    请我如果要进入C:\aa下把复制过去的文件删掉 该怎么写呢
作者: DAIC    时间: 2016-1-5 09:28

回复 12# skyflykyo


进入的命令是 cd /d "C:\aa"
删除文件的命令的 del
你自己先试试吧
作者: skyflykyo    时间: 2016-1-5 13:10

回复 13# DAIC
已经搞定了




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2