标题: [文本处理] 两个相同bat执行结果不同? [打印本页]
作者: tiandyoin 时间: 2023-10-1 14:13 标题: 两个相同bat执行结果不同?
本帖最后由 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
作者: 77七 时间: 2023-10-1 14:29
换行符不同
作者: tiandyoin 时间: 2023-10-1 15:05
回复 2# 77七
万分感谢!可还有一个问题,输入
set /p p10=p10=&rem a><b
set /p p20=p20=&rem a><b "c>|d
后, head 是等于 0 ,但是没打印 test2
作者: 77七 时间: 2023-10-1 15:23
回复 3# tiandyoin
复制代码
复制代码
作者: 77七 时间: 2023-10-1 15:32
本帖最后由 77七 于 2023-10-1 15:33 编辑
- @echo off
- set a=1 &set b=2
- echo %a%#
- set "a=1"&set b=2
- echo %a%#
- set "a=1" &set b=2
- echo %a%#
- (set a=1)&set b=2
- echo %a%#
- set "a="
- pause
复制代码
作者: tiandyoin 时间: 2023-10-1 17:27
回复 5# 77七
如果 head=3
(echo.!p20:~%head%!) 等于 "c>|d
(echo.!p20:~0,%head%!) 等于 p20:~0,3
第二个不求值?
作者: tiandyoin 时间: 2023-10-1 17:35
回复 6# tiandyoin
没见过 , 作为分隔符。
诶,你今天总算见到了~
echo.!p20:~0^,%head%!
就会求值
作者: 77七 时间: 2023-10-1 18:50
本帖最后由 77七 于 2023-10-1 18:59 编辑
回复 6# tiandyoin
- @echo off
- set str=123456
- setlocal enabledelayedexpansion
- echo %str:~0,2%
- echo,%str:~0,2%
- echo=%str:~0,2%
- echo.%str:~0,2%
-
- echo !str:~0,2!
- echo,!str:~0,2!
- echo=!str:~0,2!
- echo.!str:~0,2!
-
- pause
复制代码
批处理技术内幕:ECHO命令
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |