无忧启动论坛
标题: 各位前辈,请教 set/p 输入内容的问题[已解决] [打印本页]
作者: yechengzhou 时间: 2018-7-2 15:56
标题: 各位前辈,请教 set/p 输入内容的问题[已解决]
本帖最后由 yechengzhou 于 2018-7-5 15:05 编辑
各位前辈,请教 set/p 输入内容的问题
比如输入以下特殊符号按回车后会终止批处理的执行并退出
|
&
<
>
有解决办法的方案吗?
已找到的方案,请各位测试...
@echo off
setlocal enabledelayedexpansion
:x
cls
set ^a=z
set/p ^a=请选择[0-4]:
set str=!^a!
set str=!str!fedcba9876543210&set/a len=0x!str:~15,1!
if %len% gtr 1 goto x
if !^a!==^| goto x
if !^a!==^& goto x
if !^a!==^< goto x
if !^a!==^> goto x
if !^a!==^" goto x
if !^a!==^^ goto x
if !^a!==^; goto x
if !^a!==^, goto x
if !^a!==^= goto x
if !^a!==^^! goto x
if !^a!==z goto x
if !^a!==1 goto y
if !^a!==2 goto y
if !^a!==3 goto y
if !^a!==4 goto y
if !^a!==0 exit
goto x
:y
echo 你好
pause
goto x
这种方案简洁
@echo off
setlocal enabledelayedexpansion
:x
cls
set/p ^str=请选择[0-2]:
for %%i in ( ^echo !^str!^ ) do (set str1=%%i)
if not !^str!==!str1! goto x
if !^str!==0 goto y
if !^str!==1 goto y
if !^str!==2 goto y
goto x
:y
echo 你好
pause
goto x
用在更改文件名称的方案:
@echo off
setlocal enabledelayedexpansion
:x
cls
set/p ^str=请输入一新的有效文件名称(不包括扩展名):
for /f tokens^=1-2^ delims^=^" %%i in ('echo !^str!') do set ^str1=%%i
if !^str! gtr !^str1! goto x
set str2=^!^str:~0,1!
if "%str2%"==" " goto x
@echo off>%cd%\log_files\^!^str!.123
if exist %cd%\log_files\.123 del %cd%\log_files\.123
if not exist %cd%\log_files\!^str!.123 (goto x) else (goto y)
goto x
:y
del %cd%\log_files\*.123
echo !^str!
pause
goto x
作者: holley2008 时间: 2018-7-2 16:22
因为这些是管道符、连接符和重定向符
作者: nttwqz 时间: 2018-7-2 17:51
set /p "input="
作者: chiannet 时间: 2018-7-3 18:06
本帖最后由 chiannet 于 2018-7-3 18:11 编辑
- @ECHO OFF
- SETLOCAL ENABLEDELAYEDEXPANSION
- SET "TP=%~DP0"
- REM 原始.TXT所在路径名,赋值给TP,以“\”结尾。
- IF NOT EXIST "%TP%原始.TXT" (ECHO.&ECHO 未发现"%TP%原始.TXT"
- PAUSE >NUL&CLS&EXIT)
- :N
- CLS&ECHO.&ECHO.&ECHO.&ECHO.
- SET /P ^F=输入定位符号/字符串并回车:
- SET ^A=!^F!
- SET /A FSL=0
- :FSL
- SET ^A=!^A:~0,-1!
- SET /A FSL+=1
- IF "!A!"=="" GOTO M
- GOTO FSL
- :M
- IF %FSL% EQU 1 (SET SY=符号) ELSE (SET SY=字符串)
- CLS&SET AX=
- ECHO.&ECHO.
- ECHO.&ECHO 按需求变换“原始.TXT”中每行字符串
- ECHO.&ECHO.
- ECHO.&ECHO 1、取得最左“!^F!”之前的字符
- ECHO.&ECHO 2、取得最左“!^F!”之后的字符
- ECHO.&ECHO 3、取得最右“!^F!”之前的字符
- ECHO.&ECHO 4、取得最右“!^F!”之后的字符
- ECHO.&ECHO 5、退出
- ECHO.&ECHO.
- SET /P S=输入代码并回车:
- IF NOT "%S%"=="" SET S=%S:~0,1%
- IF %S% EQU 1 (SET AX=左&SET BX=前)
- IF %S% EQU 2 (SET AX=左&SET BX=后)
- IF %S% EQU 3 (SET AX=右&SET BX=前)
- IF %S% EQU 4 (SET AX=右&SET BX=后)
- IF %S% EQU 5 EXIT
- IF "%AX%"=="" (ECHO.&ECHO 输入无效,请重新输入!
- PAUSE >NUL&CLS&GOTO M)
- SET PT="%TP%最%AX%定位%SY%之%BX%的字符.TXT"
- DEL %PT% /F >NUL 2>NUL
- FOR /F "DELIMS=" %%I IN ('TYPE "%TP%原始.TXT"') DO (
- SET ^A=%%I
- SET ^B=%%I
- CALL :L "!^B!"
- )
- IF EXIST %PT% (CLS&ECHO.&ECHO %PT% 已创建。&ECHO.&ECHO.&PAUSE)
- GOTO N
- :L
- IF %S% EQU 1 (SET ^C=!^B:~0,%FSL%!
- IF !^C!==!^F! (SET ^R=“!^F!”位于此行首位。&GOTO E))
- IF %S% EQU 4 (SET ^C=!^B:~-%FSL%!
- IF !^C!==!^F! (SET ^R=“!^F!”位于此行末尾。&GOTO E))
- SET ^R=此行找不到指定的定位%SY%“!^F!”!&SET /A N=%FSL%
- :R
- SET /A M=%N%-%FSL%
- IF %S% EQU 4 (
- SET ^B=!^A:~-%N%!
- SET ^D=!^B:~0,%FSL%!
- IF !^D!==!^F! (SET ^R=!^A:~-%M%!&GOTO E)
- IF !^B!==!A! GOTO E
- )
- IF %S% EQU 3 (
- SET ^D=!^B:~-%FSL%,%FSL%!
- IF !^D!==!^F! (SET ^R=!^B:~0,-%FSL%!&GOTO E)
- SET ^B=!^B:~0,-1!
- )
- IF %S% EQU 2 (SET ^D=!^B:~0,%FSL%!
- IF !^D!==!^F! (SET ^R=!^B:~%FSL%,100000!&GOTO E)
- SET ^B=!^B:~1,100000!
- )
- IF %S% EQU 1 (
- SET ^B=!^A:~0,%N%!
- SET ^D=!^B:~-%FSL%!
- IF !^D!==!^F! (SET ^R=!^A:~0,%M%!&GOTO E)
- IF !^B!==!^A! GOTO E
- )
- SET /A N+=1
- IF %S% GTR 1 (IF %S% LSS 4 (IF "!B!"=="" GOTO E))
- GOTO R
- :E
- IF %S% GTR 1 (IF %S% LSS 4 (IF "!R!"=="" SET ^R=有且仅有一个“!^F!”位于此行最%BX%位。))
- ECHO !^R!>>%PT%
- GOTO :EOF
复制代码
这是个综合应用
截取特征符号前后的字符.7z
(1.15 KB, 下载次数: 4)