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

[文本处理] for /f不能读取%0表示的自己吗?

[复制链接]
发表于 2008-11-1 16:14:52 | 显示全部楼层 |阅读模式
把下面的代码中的%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 编辑 ]
发表于 2008-11-1 16:57:29 | 显示全部楼层
  这个批处理所在的完整路径带有空格之类的特殊字符吧?把for语句换成一下代码试试:
  1. for /f "usebackq skip=5 delims=" %%a in ("%0") do %%a
复制代码
发表于 2008-11-1 17:01:28 | 显示全部楼层
  1. for /f "usebackq skip=5 delims=" %%a in (`type "%~0"`) do %%a
复制代码

[ 本帖最后由 yslyxqysl 于 2008-11-1 17:09 编辑 ]
发表于 2008-11-1 17:10:16 | 显示全部楼层
桌面运行。
2L结果:系统找不到文件 "C:\Documents
3L结果:0101001110100011111000001110100001010100010000100010000010100001010000011010000
发表于 2008-11-1 17:37:24 | 显示全部楼层
  1. for /f "useback skip=5 delims=" %%a in ("%~f0") do %%a
复制代码
发表于 2008-11-1 17:54:15 | 显示全部楼层
  1. for /f "skip=5 delims=" %%a in ('type "%~f0"') do %%a
复制代码
 楼主| 发表于 2008-11-1 19:00:07 | 显示全部楼层
5楼、6楼的代码全部成功,基本能看明白,谢谢!
可是为什么直接用%0不行呢?
发表于 2008-11-1 21:17:19 | 显示全部楼层
1、为什么直接用%0不行呢?
看到usebackq没?还不明白?看for /?

2、为什么"%0"不行呢?
参见:http://bbs.verybat.org/thread-13173-1-1.html
发表于 2008-11-1 23:00:50 | 显示全部楼层
回复楼主:
你如果是在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等命令。。。
发表于 2008-11-2 10:35:54 | 显示全部楼层

回复 9楼 的帖子

Great work!
建议以后凡是提这个问题的帖子全部锁定,并要求提问者来学习这个帖子^_^
发表于 2008-11-2 18:16:44 | 显示全部楼层
2楼粗心了、
for /f "usebackq skip=5 delims=" %%a in ("%~0") do %%a
 楼主| 发表于 2008-11-2 20:37:28 | 显示全部楼层

回复 8楼 的帖子

不用usebackq for不能识别“”闭合的文件名吗?
另外,%~0和%~f0等同吗?
for/?看不明白,还请通俗的讲一下o(∩_∩)o...
发表于 2008-11-2 21:02:31 | 显示全部楼层

回复 12楼 的帖子

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

1、8楼给出的链接被你无视了
2、论坛教程也被你无视了,正因为for比较复杂,关于for的教程多于牛毛
发表于 2008-11-3 00:33:30 | 显示全部楼层

回复 12楼 的帖子

for /?哪一句不明白?
如果全部不明白,请到“批处理教学&资料”版块阅读教程。
 楼主| 发表于 2008-11-6 16:54:28 | 显示全部楼层
谢谢大家的回答!
自己花时间测试了一下,终于弄明白了!
学到了不少东西!高兴ing(*^__^*) 嘻嘻……
  /\  
   \ \
    \ \
    /  \
   <===>\
   <    )>
   <===>/
    \  /
    / /  
   / /  
   \/
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-17 03:37 , Processed in 0.017486 second(s), 7 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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