for 续8

时间:2023-03-09 20:07:12
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中:

 
 

for 续8

 
 

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


一个正确的结果

 
 

for 续8

 
 

 
 

再如:

@echo off

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

pause

 
 

sublime中:

 
 

for 续8

 
 

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

分离出来进行逐行显示

 
 

for 续8

 
 

 
 

 
 

 
 

【made by siwuxie095】