Board logo

标题: [文件操作] [已解决]批处理for /f中%%i的扩展为何会失败? [打印本页]

作者: abcdshenji    时间: 2011-5-2 13:38     标题: [已解决]批处理for /f中%%i的扩展为何会失败?

我在C盘建了4个文本:a.txt b.txt c.txt d.txt
  1. @echo off
  2. (
  3. echo ========扩展到a属性=========
  4. for /f %%i in ('dir /b /a-d c:\*.txt') do echo %%~ai
  5. echo ========扩展到t属性=========
  6. for /f %%i in ('dir /b /a-d c:\*.txt') do echo %%~ti
  7. echo ========扩展到z属性=========
  8. for /f %%i in ('dir /b /a-d c:\*.txt') do echo %%~zi
  9. )>$
  10. move /y $ 1.txt >nul
  11. pause>nul
复制代码
结果是这样的:
  1. ========扩展到a属性=========
  2. ECHO 处于关闭状态。
  3. --a------
  4. ECHO 处于关闭状态。
  5. ECHO 处于关闭状态。
  6. ========扩展到t属性=========
  7. ECHO 处于关闭状态。
  8. 2011/04/22 23:31
  9. ECHO 处于关闭状态。
  10. ECHO 处于关闭状态。
  11. ========扩展到z属性=========
  12. ECHO 处于关闭状态。
  13. 3162
  14. ECHO 处于关闭状态。
  15. ECHO 处于关闭状态。
复制代码
其他属性如n x f 什么的都正常。。。就这三个不正常。。而且能显示的修改时间和文件大小都不对。。。这是怎么回事呀?
作者: hanyeguxing    时间: 2011-5-2 14:23

for /f "delims=" %%i in (
作者: abcdshenji    时间: 2011-5-2 14:32

2# hanyeguxing


还是不行。。结果一样。。
作者: powerbat    时间: 2011-5-2 14:47

@echo off
pushd C:\
...
pause>nul
popd
作者: abcdshenji    时间: 2011-5-2 16:10

本帖最后由 abcdshenji 于 2011-5-2 16:13 编辑

4# powerbat


试过可以。。。但是我不知道pushd的用法。。要查查了
作者: abcdshenji    时间: 2011-5-2 16:33

http://bathome.net/viewthread.php?tid=12128&highlight=pushd
看了这篇帖子后还是不太明白。。难道%%i部分扩展跟必须用pushd?两者之家存在某些关联?这是什么道理啊
作者: powerbat    时间: 2011-5-2 16:56

与命令本身没有任何关系,只与命令产生的结果有关。
脚本运行的目录中没有那些文件,那几个属性当然扩展不出来。
pushd就是改变工作目录的。当然你可以用cd /d
作者: CrLf    时间: 2011-5-2 17:02

因为dir /b 不加/s的时候结果是不带路径的,而%%~zi获取扩展信息的方式是读取dir输出的对应文件的信息,不过因为此时dir只输出了文件名而没有输出文件路径,%%~zi就认为%%i是当前文件夹下的文件,读取对应信息时却找不到文件,所以会出现这些错误
作者: abcdshenji    时间: 2011-5-2 17:13

8# zm900612


原来如此。。学习了。。也谢谢powerbat。。你们说的都是一个道理:也就是说%%i扩展中的%%i的值必须带有路径。。如果没有路径就代表当前目录。。是吧。。谢谢




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