Board logo

标题: [文件操作] 请教各位文件的完整路径批处理怎么表示? [打印本页]

作者: lzf_voip    时间: 2015-5-20 08:21     标题: 请教各位文件的完整路径批处理怎么表示?

set “d1=D:\Program Files\1\2\3\4\5\6\7\8\9\10\11\12\13\14\15\16\17\18\19\”        /*用d1表示一个路径,很长而且有空格*/
set “n1=abc.lnk”                                                                                                           /*用n1表示一个文件名*/

想在for循环的in ('more +36 %0')像::\Program Files\1\2\3\4\5\6\7\8\9\10\11\12\13\14\15\16\17\18\19\abc.lnk这么调用,用d1和n1分别替代D:\Program Files\1\2\3\4\5\6\7\8\9\10\11\12\13\14\15\16\17\18\19\和abc.lnk,该怎么表示,谢谢!写成::%d1%%n1%好像没用

作者: gawk    时间: 2015-5-20 09:37

  1. @echo off
  2. set "d1=D:\Program Files\1\2\3\4\5\6\7\8\9\10\11\12\13\14\15\16\17\18\19\"
  3. set "n1=abc.lnk"
  4. for /f "tokens=1*" %%i in ('more +8 "%~f0"') do (
  5.     call echo %%j
  6. )
  7. pause
  8. :: %d1%%n1%
复制代码

作者: lzf_voip    时间: 2015-5-20 10:53

回复 2# gawk


    好像也不行,麻烦你给我一个for循环带有more的语法给我研究一下
作者: gawk    时间: 2015-5-20 11:31

回复 3# lzf_voip


    2楼的代码没有for还是没有more呢?
作者: lzf_voip    时间: 2015-5-20 12:15

本帖最后由 lzf_voip 于 2015-5-20 12:17 编辑

回复 4# gawk


    for和more都有,这样说吧,BAT中多次需要用到一个同样的带空格的长字符串,如何在BAT文件头进行定义呢?就好比C语言中的define命令是什么,怎么用?
作者: gawk    时间: 2015-5-20 12:36

回复 5# lzf_voip


    看不懂你想实现什么功能。直接把有问题的完整代码发出来,我帮你改改。
作者: lzf_voip    时间: 2015-5-22 10:59

回复 6# gawk
  1. @echo off
  2. set "d1=D:\Program Files\1\2\3\4\5\6\7\8\9\10\11\12\13\14\15\16\17\18\19\"
  3. set "n1=abc.lnk"
  4. for /f "tokens=1* delims=:" %%i in ('more +8  %0') do (
  5.     call echo %%j
  6. )
  7. pause
  8. ::D:\Program Files\1\2\3\4\5\6\7\8\9\10\11\12\13\14\15\16\17\18\19\abc.lnk
复制代码
目的就是要用d1和n1来表示D:\Program Files\1\2\3\4\5\6\7\8\9\10\11\12\13\14\15\16\17\18\19\abc.lnk,因为这个带空格的完整路径很长,而且多次要用到。
作者: gawk    时间: 2015-5-25 17:07

回复 7# lzf_voip


    请举个具体的例子说明一下为什么2楼那种方法不能满足你的需求
作者: lzf_voip    时间: 2015-5-27 10:54

回复 8# gawk


    more命令实际读出的是: 本批处理文件的路径+%d1%%n1% ,而不是一个文件的完整路径,比如: D:\Program Files\1\2\3\4\5\6\7\8\9\10\11\12\13\14\15\16\17\18\19\abc.lnk
作者: gawk    时间: 2015-5-27 11:33

回复 9# lzf_voip


我这里测试没问题,可以读到。把你的测试结果发出来看看?
  1. @echo off
  2. set "d1=D:\Program Files\1\2\3\4\5\6\7\8\9\10\11\12\13\14\15\16\17\18\19\"
  3. set "n1=abc.lnk"
  4. for /f "tokens=1*" %%i in ('more +11 "%~f0"') do (
  5.     for /f "delims=" %%j in ('call echo %%j') do (
  6.         set "str=%%j"
  7.     )
  8. )
  9. echo %str%
  10. pause
  11. :: %d1%%n1%
复制代码

作者: lzf_voip    时间: 2015-5-27 16:34

回复 10# gawk
  1. @echo off
  2. set "d1=D:\Program Files\"
  3. set "n1=abc.lnk"
  4. for /f "tokens=1*" %%i in ('more +11 "%~f0"') do (
  5.     for /f "delims=" %%j in ('call echo %%j') do (
  6.         set "str=%%j"
  7.     )
  8. )
  9. echo %str%
  10. pause
  11. ::%d1%%n1%
复制代码
运行就只出现一个命令提示符的框,里面没有任何字符
作者: gawk    时间: 2015-5-27 17:49

回复 11# lzf_voip


    批处理代码在语法上是非常严格的,你看看10楼代码最后一行的冒号后面有个空格。
作者: lzf_voip    时间: 2015-5-27 17:59

回复 12# gawk


    呵呵,加上空格还是一样,好像都听到“嘣”的一声,就一直没动静,看不到任何字符。
作者: gawk    时间: 2015-5-27 19:27

回复 13# lzf_voip


    把你执行有问题的bat文件压缩之后传上来我试试
作者: lzf_voip    时间: 2015-5-27 23:39

回复 14# gawk


    只要在D:\Program Files\创建一个快捷方式abc.lnk就可以测试了啊
作者: gawk    时间: 2015-5-28 16:57

回复 15# lzf_voip


    我的代码都是经过测试没问题才发出来的。上传你的bat文件吧




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