Board logo

标题: [文本处理] 【已解决】求解一些批处理for语句的使用问题 [打印本页]

作者: idos    时间: 2016-9-5 20:12     标题: 【已解决】求解一些批处理for语句的使用问题

本帖最后由 idos 于 2016-9-9 21:45 编辑

两个问题:
第一个:
  1. @echo off
  2. for %%i in ("C:Program Files\7-Zip\7z.exe\..") do (
  3. echo 文件所在文件夹:%%~nxi
  4. )
  5. pause
复制代码
这个代码为何会输出  7-zip??

第二个:
  1. @echo off
  2. for /f "delims=" %%i in (a.txt) do (
  3. echo,%%i
  4. )
  5. pause
复制代码
这段代码用的什么原理可以把a.txt文件空行清掉而不删除行首的空格或制表符?
作者: wskwfkbdn    时间: 2016-9-5 20:24

for默认删除空行,不删除其他空白符的行
%%~nxi 是n是文件名 x是后缀名  nx是文件名+后缀名 即7z.exe
作者: GNU    时间: 2016-9-5 20:59

回复 2# wskwfkbdn


    你看错了,结果是 7-Zip 而不是 7z.exe
作者: wskwfkbdn    时间: 2016-9-5 21:36

回复 3# GNU


    看错  不代表我说的不对
作者: GNU    时间: 2016-9-5 21:41

回复 4# wskwfkbdn


    确实如此。2楼的两句话跟楼主的2个问题一点关系都没有,也是挺难得。
作者: wskwfkbdn    时间: 2016-9-5 21:48

回复 5# GNU


    我说没有不对,文件名 扩展名 7z.exe  aaa.txt  告诉你命令的作用,for本来就可以过滤空行 ,只要没有什么特殊不可见字符一般都过滤了,如果不到,那你解释解释
作者: pcl_test    时间: 2016-9-5 23:08

1、这里的Crogram Files\7-Zip\7z.exe识别为目录,\..表示上一级目录,整句就是表示为C:Program Files\7-Zip\7z.exe该目录的上一级目录,也就是C:Program Files\7-Zip,经参数扩展%%~nxi为7-Zip
2、for /f 以换行符作为行的结尾,默认以空格、制表符分割行,空行只有回车换行符被丢弃,所以不会输出,"delims="表示取消默认分割符(没有指定任何分隔符),所以能输出行首不为;的带空格、制表符的整一行
作者: xxpinqz    时间: 2016-9-5 23:26

其实个人觉得楼主给我提供了一个新思路,以前如果需要获取一个文件上级目录时,都是用替换\。都没考虑过这种写法。
作者: wskwfkbdn    时间: 2016-9-6 05:35

回复 7# pcl_test


    +1
电脑就是你手机好扣字
作者: Batcher    时间: 2016-9-6 11:25

回复 8# xxpinqz


for命令教程第7页有这个例子
http://bbs.bathome.net/thread-31727-1-1.html
作者: idos    时间: 2016-9-8 20:26

回复 7# pcl_test


    嗯嗯,可是为什么要强调行首不为;的呢?
作者: idos    时间: 2016-9-9 19:17

好吧,我明白了




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