for命令中的管道符无法识别 / 此时不应有 |
问题
CMD中使用dir命令列出文件后,可用管道符|
连接find命令进行查找,放入for循环后报错。
C:\Users\136ytr>dir /tw /od D:Aria2 | find "字节"
16 个文件 32,382,287,094 字节
1 个目录 812,498,944 可用字节
C:\Users\136ytr>FOR /F "delims==" %i In ('dir /tw /od D:Aria2 | find "字节"') Do (echo "%i")
此时不应有 |。
解决方法
for语句中的管道符要用尖号^
进行转义1。
C:\Users\136ytr>FOR /F "delims==" %i In ('dir /tw /od D:Aria2 ^| find "字节"') Do (echo "%i")
C:\Users\136ytr>(echo " 16 个文件 32,382,287,094 字节" )
" 16 个文件 32,382,287,094 字节"
C:\Users\136ytr>(echo " 1 个目录 812,498,944 可用字节" )
" 1 个目录 812,498,944 可用字节"
判断变量值是否为空
解决方法
用if defined
语句来判断值是否为空2。
注意:语句中的变量不需要 % 或 ! 。
set str=
set /p "str=请输入任意字符,或直接回车:"
if defined str (
echo 变量 str 的值不为空
) else echo 变量 str 为空值
延缓环境变量/更新变量的值
问题
set free_space=
set will_delete_file=
call :get_free_space
if %free_space% LEQ 10240 (
echo 可用空间小于10G
call :get_will_delete_file
echo 将删除 %will_delete_file%
)
%will_delete_file%
无法获取到get_will_delete_file
函数执行后的结果。
解决方法
SETLOCAL ENABLEDELAYEDEXPANSION
启用扩展延迟,使用!变量名!
调用变量3。
SETLOCAL ENABLEDELAYEDEXPANSION
set var=0
for /l %%i in (1 1 10) do (
set var=%%i
rem 启用延缓环境变量
echo !var! ....
rem 未启用延缓环境变量
echo %var%
)