【CMD】批处理文件问题小记

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% 
) 

一些资料

cmd的变量总结 - feiquan - 博客园


  1. for语句中的管道符为何要用尖号^进行转义 ↩︎

  2. 批处理判断变量值是否为空的终极方法_ScottTiger的博客-CSDN博客 ↩︎

  3. cmd的变量总结 - feiquan - 博客园 ↩︎

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值