本帖最后由 tiandyoin 于 2023-10-1 15:06 编辑
今天遇到一灵异事件,两个相同的bat(用beyondcompare比较过),其中一个 2.bat 运行后,出现语法错误,并且把目录下的所有文件全删除了。。。
起初怀疑是 endlocal 的反常用法,但是修改掉,注释掉,都还是有问题。。
下面是运行结果- C:\Desktop\dos>2.bat
- 'se' 不是内部或外部命令,也不是可运行的程序
- 或批处理文件。
- p10=
- 系统找不到指定的路径。
- 找不到批处理文件。
- 找不到批处理文件。
复制代码 下面是代码,直接拷贝不能看到效果,要从网盘下载的来测试。- @echo off
- cd /d "%~dp0"
- call :test1
- @goto :EOF
-
- :test1
- set /p p10=p10=&rem a><b
- set /p p20=p20=&rem a><b "c>|d
- set "$=%TEMP%\$"
- >nul 2>nul del /f /q "%$%"
- setlocal EnableDelayedExpansion
- set "p10=!p10! "
- cd.&call :Strstr p20 p10 head len
- echo errorlevel=%errorlevel%
- echo head=!head!
- if !head!==0 (
- echo test2
- ) else set head=&rem
- if defined head (echo test3 & (echo.!p20:~%head%!)>"!$!") else echo test4
- endlocal
- if exist "%$%" set /p p20=<"%$%"
- @set p20&pause
- @goto :EOF
-
- @rem Usage:
- rem 功能: 查找子串 s2 在字符串 s1 中的位置。
- :Strstr <&s1, &s2, &s1.Location, &s2.Length>
- @if "%~1%~1"=="" exit /b 1
- @if "%~2%~2"=="" exit /b 1
- @if "%~3%~3"=="" exit /b 1
- @if "%~4%~4"=="" exit /b 1
- set %~3=&rem
- set %~4=&rem
- setlocal EnableDelayedExpansion
- set i=-1
- :Loop_i
- set /a i+=1
- set j=-1
- :Loop_j
- set /a j+=1
- set /a k=!i!+!j!
- call set "$1=%%%~1:~!k!,1%%"
- call set "$2=%%%~2:~!j!,1%%"
- if defined $1 if defined $2 (
- @if /i not "!$1!!$1!"=="!$2!!$2!" goto :Loop_i
- )
- if not defined $2 (
- endlocal & set %~3=%i% & set %~4=%j%
- @set %~3&set %~4&pause
- @exit /b 0
- )
- @if not defined $1 exit /b 1
- @goto :Loop_j
- @exit /b 0
复制代码 链接:https://pan.baidu.com/s/1AOse72_L49su7VFAclEFgA?pwd=tc98
提取码:tc98 |