@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 off
setlocal enabledelayedexpansion
::假设 1.txt 的内容为:1245.55!45
type 1.txt
echo.
for /f tokens^=1-2^ delims^=^! %%i in ( 'type 1.txt' ) do (echo %%i)
pause
请测试.