Board logo

标题: [文本处理] for /f不能读取%0表示的自己吗? [打印本页]

作者: Cameron    时间: 2008-11-1 16:14     标题: for /f不能读取%0表示的自己吗?

把下面的代码中的%0换为物理路径才能执行成功。
  1. @echo off
  2. color 0a
  3. :loop
  4. for /f "skip=5 delims=" %%a in (%0) do %%a
  5. goto loop
  6. :code
  7. echo 0101001110100011111000001110100001010100010000100010000010100001010000011010000
  8. echo 1001101011101011010001100001010000111110000010100000011111111001001010100101011
  9. echo 1011001010010101010011001101001101011010101010100110110010010100110110011011101
  10. echo 0010110110101100101000101010100101010010110101000001011111110100111001101010101
复制代码
还请大家解释下!

[ 本帖最后由 Cameron 于 2008-11-1 16:24 编辑 ]
作者: namejm    时间: 2008-11-1 16:57

  这个批处理所在的完整路径带有空格之类的特殊字符吧?把for语句换成一下代码试试:
  1. for /f "usebackq skip=5 delims=" %%a in ("%0") do %%a
复制代码

作者: yslyxqysl    时间: 2008-11-1 17:01

  1. for /f "usebackq skip=5 delims=" %%a in (`type "%~0"`) do %%a
复制代码

[ 本帖最后由 yslyxqysl 于 2008-11-1 17:09 编辑 ]
作者: yslyxqysl    时间: 2008-11-1 17:10

桌面运行。
2L结果:系统找不到文件 "C:\Documents
3L结果:0101001110100011111000001110100001010100010000100010000010100001010000011010000
作者: pusofalse    时间: 2008-11-1 17:37

  1. for /f "useback skip=5 delims=" %%a in ("%~f0") do %%a
复制代码

作者: Batcher    时间: 2008-11-1 17:54

  1. for /f "skip=5 delims=" %%a in ('type "%~f0"') do %%a
复制代码

作者: Cameron    时间: 2008-11-1 19:00

5楼、6楼的代码全部成功,基本能看明白,谢谢!
可是为什么直接用%0不行呢?
作者: zqz0012005    时间: 2008-11-1 21:17

1、为什么直接用%0不行呢?
看到usebackq没?还不明白?看for /?

2、为什么"%0"不行呢?
参见:http://bbs.verybat.org/thread-13173-1-1.html
作者: pusofalse    时间: 2008-11-1 23:00

回复楼主:
你如果是在CMD中输入的批处理名字,那么%0只会扩展为你输入的名字,并不包含全路径,你输入的是什么,%0就会扩展为什么。

你如果是双击运行,那么%0会是自身的全路径,如果自身所在绝对路径中含有空格,%0会自动在路径首尾加上引号""闭合自身。例:如果你的批处理是放在了一个c:\te st中(路径含空格),批处理名字叫a.bat。如果你双击运行,"%0" 实质会扩展为""c:\te st\a.bat""--首尾各2个引号--错误的格式。
如果你在CMD中输入a运行,那么type %0实质是type a,目录中没有以a命名的文件,所以出错。
%~f0 则是扩展为一个完全合格的包含自身路径+文件名+扩展名的字串。
剩下的就是for如何工作的问题了。。。建议重温call、for等命令。。。
作者: Batcher    时间: 2008-11-2 10:35     标题: 回复 9楼 的帖子

Great work!
建议以后凡是提这个问题的帖子全部锁定,并要求提问者来学习这个帖子^_^
作者: 随风    时间: 2008-11-2 18:16

2楼粗心了、
for /f "usebackq skip=5 delims=" %%a in ("%~0") do %%a
作者: Cameron    时间: 2008-11-2 20:37     标题: 回复 8楼 的帖子

不用usebackq for不能识别“”闭合的文件名吗?
另外,%~0和%~f0等同吗?
for/?看不明白,还请通俗的讲一下o(∩_∩)o...
作者: zqz0012005    时间: 2008-11-2 21:02     标题: 回复 12楼 的帖子

同学,你这样的学习方法是不对的

1、8楼给出的链接被你无视了
2、论坛教程也被你无视了,正因为for比较复杂,关于for的教程多于牛毛
作者: Batcher    时间: 2008-11-3 00:33     标题: 回复 12楼 的帖子

for /?哪一句不明白?
如果全部不明白,请到“批处理教学&资料”版块阅读教程。
作者: Cameron    时间: 2008-11-6 16:54

谢谢大家的回答!
自己花时间测试了一下,终于弄明白了!
学到了不少东西!高兴ing(*^__^*) 嘻嘻……
  /\  
   \ \
    \ \
    /  \
   <===>\
   <    )>
   <===>/
    \  /
    / /  
   / /  
   \/




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