[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文件操作] [已解决]批处理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 什么的都正常。。。就这三个不正常。。而且能显示的修改时间和文件大小都不对。。。这是怎么回事呀?
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

for /f "delims=" %%i in (
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

2# hanyeguxing


还是不行。。结果一样。。

TOP

@echo off
pushd C:\
...
pause>nul
popd

TOP

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

4# powerbat


试过可以。。。但是我不知道pushd的用法。。要查查了

TOP

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

TOP

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

评分人数

TOP

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

评分人数

TOP

8# zm900612


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

TOP

返回列表