for 续8
---------siwuxie095
一个问题分析:
在 CMD 窗口输入:
dir
dir /b
dir /b /ah
dir C:\Windows
dir C:\Windows /b
dir C:\windows /b /ah
dir C:\temp.txt /b /ah
或在批处理文本中:
@echo off dir dir /b dir /b /ah dir C:\Windows dir C:\Windows /b dir C:\windows /b /ah rem 手动在C盘根目录添加一个 temp.txt dir C:\temp.txt /b /ah pause |
所有指令都可以执行,保存为批处理文件,
也可以正确执行
如:显示文件时间
@echo off for /f "delims=" %%i in ('dir /b') do echo %%~ti pause |
也可以正确执行,dir 没有指明搜索路径,就默认为
当前路径
如果指明搜索路径:
@echo off for /f "delims=" %%i in ('dir C:\windows /b') do echo %%~ti pause |
程序不能正确执行,无论对搜索的格式如何修改
这种改法:
for /f "delims=" %%i in ('dir C:\ /b /ah') do echo %%~ti
还是不能正确执行
如果直接在 CMD 窗口执行,需要减少一个 %:
for /f "delims=" %i in ('dir C:\ /b /ah') do echo %~ti
还是不能正确执行
%~aI
%~tI
%~zI
%~$path:I
这四个变量都有这个现象,即不能指定路径,但其余的变量都不会
出现这个问题,让人百思不得其解
出现上面问题的原因是:
%~aI
%~tI
%~zI
需要指明完整路径,而 dir 搜索出的只是文件名,这样 %%~ti 就把
当前工作目录设置为文件的路径,所以找不到文件
用 pushd 来转到相应目录即可:
@echo off pushd C:\windows for /f "delims=" %%i in ('dir C:\windows /b') do echo %%~ti pause |
也可以用 cd /d 来指明路径:
@echo off cd /d C:\windows for /f "delims=" %%i in ('dir C:\windows /b') do echo %%~ai pause>nul |
最后一个,%~$path:I 非常特殊:
@echo off pushd C:\ rem 手动在C盘添加一个 temp.txt for /f "delims=" %%i in ('dir c:\temp.txt /b /ah') do echo %%~$path:i pause |
还是不能正确执行
如果改为:
@echo off rem 手动在 C盘 添加一个 temp.txt rem 单引号里有两个空格[必不可少],然后就出现了结果中那样 rem 如果多加一个 空格,会多出一个 ECHO 处于关闭状态 for %%i in ('dir C:\temp.txt ') do echo %%~$path:i pause |
sublime中:
运行一览:显示两个 ECHO 处于关闭状态
和 一个正确的结果
再如:
@echo off for %%a in ("%path:;=" "%") do echo %%~a pause |
sublime中:
运行一览:目的就是把 PATH 环境变量的每个路径
分离出来进行逐行显示
【made by siwuxie095】
posted on 2017-02-08 15:34 siwuxie095 阅读(207) 评论(0) 编辑 收藏 举报