for 续8

---------siwuxie095

   

   

   

   

一个问题分析:

CMD 窗口输入:

dir

dir /b

dir /b /ah

dir C:Windows

dir C:Windows /b

dir C:windows /b /ah

dir C: emp.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: emp.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: emp.txt /b /ah') do echo %%~$path:i

pause

   

还是不能正确执行

   

如果改为:

@echo off

rem 手动在 C 添加一个 temp.txt

rem 单引号里有两个空格[必不可少],然后就出现了结果中那样

rem 如果多加一个 空格,会多出一个 ECHO 处于关闭状态

for %%i in ('dir C: emp.txt ') do echo %%~$path:i

pause

   

sublime中:

   

   

运行一览:显示两个 ECHO 处于关闭状态

一个正确的结果

   

   

   

再如:

@echo off

for %%a in ("%path:;=" "%") do echo %%~a

pause

   

sublime中:

   

   

运行一览:目的就是把 PATH 环境变量的每个路径

分离出来进行逐行显示

   

   

   

   

   

【made by siwuxie095】

   

   

原文地址:https://www.cnblogs.com/siwuxie095/p/6378444.html