标题: [其他] 批处理如何清除自定义的变量? [打印本页]
作者: binghejin 时间: 2016-5-27 13:05 标题: 批处理如何清除自定义的变量?
举例说明问题,例如:- @echo off
- :1
- cls
- set /p a=请输入要删除的文件名,输入0退出。
- if "%a%"=="" goto 1
- if "%a%"=="0" goto end
- if not exist %a% goto 错误
- del %a% >nul
- goto 1
- :错误
- echo 没有%a%这个文件,请检查.
- pause
- goto 1
- :end
复制代码
就是类似这样的批处理,在运行过程中发现,比如第一次输入1,批处理确实将1这个文件删除了,但是如果多输入几次,例如把1,2,3,4,5,6这6个文件都删除之后要退出的时候,输入0,批处理并不退出,而是继续执行删除0这个文件,而0这个文件根本不存在,于是批处理报错,请问该怎么处理?
在网上找到的答案无外乎两种:
1、用@echo off&setlocal enabledelayedexpansion这个代码,但无效。
2、用set a=<nul这个代码来清空变量,但是依然无效!
作者: gawk 时间: 2016-5-27 13:41
- @echo off
- setlocal enabledelayedexpansion
- :1
- cls
- set /p a=请输入要删除的文件名,输入0退出。
- if "!a!"=="" goto 1
- if "!a!"=="0" goto end
- if not exist !a! goto 错误
- del !a! >nul
- goto 1
- :错误
- echo 没有!a!这个文件,请检查.
- pause
- goto 1
- :end
复制代码
开启变量延迟扩展之后需要把%a%改成!a!
作者: 111 时间: 2016-5-27 23:39
一般我就“set a=”了
作者: heyoug 时间: 2016-5-28 10:23
if "!a!"=="0" 这里我习惯用 if !a! equ 0 判断,
:1的下一行我会加一个 set a=0
作者: binghejin 时间: 2016-5-28 13:41
本帖最后由 pcl_test 于 2016-5-29 12:56 编辑
回复 2# gawk - @echo off&setlocal enabledelayedexpansion
- if "%1%"=="f" goto 1
- goto 权限错误
- :1
- title 删除积分记录
- cls
- echo=
- echo=
- echo 快保维修会员管理系统V1.00 删除积分记录
- echo =======================================
- dir /b shuju
- echo =======================================
- echo 请输入车号,输入0返回!
- set /p u=
- if "%u%"=="" goto 1
- if "%u%"=="0" goto end
- if not exist shuju\%u% goto 车号不存在
- :2
- cls
- if exist temp\ls.txt del temp\ls.txt>nul
- if exist temp\list.txt del temp\list.txt>nul
- set k=%time: =0%
- set l=%k::=%
- set m=%l:~0,6%
- set n=%date:~2,2%
- if not exist shuju\%u%\%n%* goto 3
- dir shuju\%u%\%n%* /b >temp\ls.txt
- findstr /n .* temp\ls.txt>>temp\list.txt
- echo=
- type temp\list.txt
- :3
- set z=0
- echo ===============================================================
- for /f %%b in (shuju\%u%\zf) do (echo 车号 %u% 的车辆,目前积分 %%b 分!)
- echo ===============================================================
- echo 请输入要删除的积分记录,输入 X 删除 %u% 所有积分记录
- echo 0=返回
- set /p z=请输入要删除的序号
- if "%z%"=="" goto 2
- if "%z%"=="0" goto end
- if "%z%"=="x" goto 删除全部
- set d=temp\ls.txt
- for %%e in (%z%) do (call :lp %%e)
- :lp
- for /f "tokens=1,* delims=:" %%f in ('findstr/n .* %d%') do (
- if %%f equ %1 echo.%%g>>temp\new.txt)
- for /f %%e in (temp\new.txt) do (
- del shuju\%u%\%%e >nul 2>nul
- )
- for /f %%x in (shuju\%u%\zf) do (set jsj=%%x)
- echo A= %jsj% >>temp\js.vbs
- echo B= %sz% >>temp\js.vbs
- echo jieguo =eval(0+ A - B)>>temp\js.vbs
- echo createobject("scripting.filesystemobject").createtextfile("temp\sz.txt",true).write jieguo>>temp\js.vbs
- call temp\js.vbs
-
- for /f %%q in (temp\sz.txt) do (set xsj=%%q)
- del shuju\%u%\zf >nul 2>nul
- echo %xsj% >shuju\%u%\zf
- goto 2
- :删除全部
- echo=
- echo 您确定删除 %u% 的全部积分记录吗?【1=确定 0=返回】
- set /p o=
- if "%o%"=="" goto 删除全部
- if "%o%"=="1" goto 确定删除全部
- if "%o%"=="0" goto 1
- goto 1
- :确定删除全部
- del /q shuju\%u%\*.*
- rd shuju\%u%
- if not exist shuju\%u% goto 1
- goto 删除全部错误
- :车号不存在
- echo=
- echo 您输入的车辆 %u% 不存在...
- pause
- goto 1
- :删除全部错误
- echo=
- echo 删除 %u% 全部积分记录失败,请稍后再试...
- pause
- goto 1
- :权限错误
- cls
- echo=
- echo 该功能模块为系统调用...
- pause
- :end
复制代码
代码如上,出现错误的地方集中在第37行那里,例如:当该批处理文件执行5次之后,输入0,程序并不结束,而是继续执行,当连续输入5次0之后,程序才结束,也就是说,该批处理执行几次,那么退出的时候也需要执行几次,才能退出!
把%号改成!号没用。
作者: kaze 时间: 2019-6-17 17:15
本帖最后由 kaze 于 2019-6-17 17:25 编辑
请问解决了没有?
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |