BAT(batch)脚本必知必用之“延时环境变量扩充”

本文探讨了在BAT脚本中遇到的变量扩充问题,分析了当用户输入后变量始终为空的原因,关键在于环境变量在块内提前扩充。解决方案是使用延时变量扩展,通过`setlocal EnableDelayedExpansion`开启,并用`!`替代`%`进行变量引用。文章还提醒在`if`和`for`语句中注意延时变量的使用。
摘要由CSDN通过智能技术生成

在给朋友写一个简单的切割pcap/pcapng数据包的BAT脚本时,碰到了SET /P VAR=且等待用户输入后,VAR变量却始终为空的问题。然后仔细看了下写的脚本,发现原来没有SETLOCAL enabledelayedexpansion和通过!引用变量。

问题

下面是脚本的部分代码,做了修改并独立了出来。其实现的功能很简单,即读取用户输入的选项,然后将其赋值给一个变量
是否能发现其中的问题呢?

echo 3. 请选择文件切割的类型【倒计时10秒, 默认选 c】:
echo 1) 按数据包个数切割请按 c
echo 2) 按时间间隔切割请按 i
choice /c ci /t 10 /d c
if %ERRORLEVEL% equ 1 (
    
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`bat脚本`,即批处理脚本,是一种在Windows操作系统上使用的命令行脚本语言。用户通过编写一系列命令和宏指令,可以自动化地完成多种任务。为了在bat脚本中实现延迟操作,通常需要利用一些特殊的技巧,因为bat脚本本身并不直接支持毫秒级别的延时。 虽然在传统意义上,bat脚本没有内置的功能来实现毫秒级的延时,但是可以通过模拟计数循环来达到类似的效果。以下是一个示例,展示了如何在bat脚本中模拟500毫秒的延时: ```batch @echo off set /a count=0 rem 计算总共需要运行多少次循环来达到大约500毫秒的延时 for /l %%i in (1,1,5) do ( set /a "delay_count=%%i*100" ) :loop set /a count+=1 if %count% LSS %delay_count% goto loop echo 延迟结束! pause ``` 在这个例子中,我们首先设置了循环的总次数(每循环一次增加100,总共5次),这大约等于500毫秒。然后,我们在一个标签`loop`下面设置了一个无限循环,每次迭代都增加一个计数器`count`。当`count`达到预先计算出的值时,跳出循环并显示“延迟结束!”的消息。最后,程序会暂停等待用户按键关闭窗口。 当然,在实际应用中,对于更精确或性能敏感的任务,推荐使用更高层次的语言如Python、JavaScript等,它们拥有内置的延时功能,例如Python的`time.sleep()`函数可以直接控制毫秒级别的延时,使用起来更为简单高效。比如: ```python import time # 使用time.sleep()实现500毫秒的延时 time.sleep(0.5) print("延时结束!") ``` 这种做法在跨平台的项目中尤其有优势,因为它无需依赖特定的操作系统特性,并能提供更稳定的性能和易读性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值