File 批处理文件如果命令;如果变量包含某个字符,是否有任何方法可以完成某个任务?

File 批处理文件如果命令;如果变量包含某个字符,是否有任何方法可以完成某个任务?,file,batch-file,if-statement,File,Batch File,If Statement,好的,我有这个批处理文件,我想检测用户的输入是否包含某个字符,比如 这是我到目前为止所拥有的 如果/I%选项%==ATTRIB+h 我想让它检测是否有错误。按下 我想用.bat来检测是否有非Attrib+h的内容被按下,比如a.,作为文件扩展名。所以,如果有一个给定的文件,我不会再要求一个文件名,因为它不会正常运行 这是Magoo的部分代码 @echo off title iControl color 80 :home cls echo iControl: Logan Murphy Versi

好的,我有这个批处理文件,我想检测用户的输入是否包含某个字符,比如

这是我到目前为止所拥有的

如果/I%选项%==ATTRIB+h

我想让它检测是否有错误。按下 我想用.bat来检测是否有非Attrib+h的内容被按下,比如a.,作为文件扩展名。所以,如果有一个给定的文件,我不会再要求一个文件名,因为它不会正常运行

这是Magoo的部分代码

@echo off
title iControl
color 80

:home
cls
echo iControl: Logan Murphy Version 1.5.7
echo Copyright 2014 Logan Murphy. All rights reserved.
GOTO jiki

:jiki
title iHelp
echo.
set /p "SSL=%USERNAME%>Execute>"
echo %SSL%"|find "." >nul
cls   
if errorlevel 1 (echo notfound) else (ATTRIB +h)
rem IMPLEMENTED IT HERE!
rem Here we go
rem need to fix execution
IF /I %SSL%==attrib goto attrib
IF /I %SSL%==pause goto pause
IF /I %SSL%==backup goto backup
编辑:好的,magoo和john的回答确实很有帮助,但是如果我想让它检测文件夹名和文件名,我会更改什么

编辑:好的,Magoo,现在测试它

编辑:这并不能很好地工作,因为我正在尝试找出变量是否包含某个字符,而不是整个变量是否=为有效的文件/文件夹名,但是尝试得很好。会有点乱。。。感谢您的时间,Magoo,我很感激:

编辑:我想我已经解决了!谢谢所有帮助我的人! 这是我的新代码。。。 @回音

title iControl
color 80
:home
cls
echo iControl: Logan Murphy Version 1.5.7
echo Copyright 2014 Logan Murphy. All rights reserved.
GOTO jiki

:jiki
title iHelp
echo.
set /p "SSL=%USERNAME%>Execute>"
%SSL%
cls
goto Seconds

:Seconds
IF /I %SSL%==attrib goto attrib
IF /I %SSL%==attrib +h goto attrib+-
IF /I %SSL%==attrib -h goto attrib+-
IF /I %SSL%==attrib +r goto attrib+-
IF /I %SSL%==attrib -r goto attrib+-

用于在字符串中查找字符的VBA命令是INSTR,因此,如果要查找字符串,请执行该命令。例如,在VBA中可以使用INSTR。有两种方法可以满足您的需求:

编写INSTR的QBASIC或VBscript版本,然后从批处理脚本调用它 编写一个执行INSTR的批处理脚本。 如果你对第二个感兴趣,请看
它的效率不如第一个,因为INSTR在VBScript中几乎是一行,批处理版本会逐字符进行比较,但是如果您正在寻找一个只用于批处理的解决方案,它可能会满足您的需要。

用于查找字符串中的字符的VBA命令是INSTR,因此如果您正在查找一个字符串,那么它就是INSTR。例如,在VBA中可以使用INSTR。有两种方法可以满足您的需求:

编写INSTR的QBASIC或VBscript版本,然后从批处理脚本调用它 编写一个执行INSTR的批处理脚本。 如果你对第二个感兴趣,请看
它的效率不如第一个解决方案,因为INSTR在VBScript中几乎是一行,批处理版本会进行逐字符比较,但是如果您正在寻找一个只用于批处理的解决方案,它可以满足您的需要。

一般公式如下

echo "%var%"|find "characterorstringrequired" >nul
if errorlevel 1 (echo notfound) else (echo found)
那么以你为例,

echo "%option%"|find "i" >nul
if errorlevel 1 (echo notfound) else (ATTRIB +h)
除此之外,我不得不像你的问题一样含糊不清,恐怕

看到零件代码后

echo "%SSL%"|find "." >nul
cls   
if errorlevel 1 (echo notfound) else (ATTRIB +h)
我不确定cls是否会影响errorlevel。测试应该在建立errorlevel的命令之后直接执行-这是回显%SSL。。。线路

如果不理解命令,cmd可能造成严重损坏。attrib命令需要一个目标,因此应该是

。。。还有什么吗

把某物设为隐藏

除此之外,使用诸如attrib、pause和backup之类的cmd关键字作为标签不是一个好主意。在tyop的情况下,可能会造成损坏

了解你想做什么而不是你想怎么做的好处

要测试文件是否存在,请尝试

if exist "%SSL%" (echo "%SSL%" exists) else (echo "%SSL%" is not there)

其中echo可以是任何合法的命令序列。

一般公式如下

echo "%var%"|find "characterorstringrequired" >nul
if errorlevel 1 (echo notfound) else (echo found)
那么以你为例,

echo "%option%"|find "i" >nul
if errorlevel 1 (echo notfound) else (ATTRIB +h)
除此之外,我不得不像你的问题一样含糊不清,恐怕

看到零件代码后

echo "%SSL%"|find "." >nul
cls   
if errorlevel 1 (echo notfound) else (ATTRIB +h)
我不确定cls是否会影响errorlevel。测试应该在建立errorlevel的命令之后直接执行-这是回显%SSL。。。线路

如果不理解命令,cmd可能造成严重损坏。attrib命令需要一个目标,因此应该是

。。。还有什么吗

把某物设为隐藏

除此之外,使用诸如attrib、pause和backup之类的cmd关键字作为标签不是一个好主意。在tyop的情况下,可能会造成损坏

了解你想做什么而不是你想怎么做的好处

要测试文件是否存在,请尝试

if exist "%SSL%" (echo "%SSL%" exists) else (echo "%SSL%" is not there)

echo可以是任何合法的命令序列。

对于所有特殊字符,这样的命令怎么样

@echo off
:_Start
set /p "FID="
set FID="%FID:"=%"
setlocal EnableDelayedExpansion
for %%I in (^| ^& ^< ^> ^^ ^( ^) ' ` ^%% ^") do set FID=!FID:%%I=!
setlocal DisableDelayedExpansion
set FID="%FID:!=%"
endlocal&set FID=%FID:~1,-1%
:_Back
set _Flag1=
for /f "tokens=1* delims=~=*;,?-+\/.@#${}[]:    " %%J in ('echo !FID!') do (
  set FID=%%J%%K
  set _Flag1=%%J
  set _Flag2=%%K
)
if NOT "%_Flag2%"=="" goto :_Back
if NOT defined _Flag1 goto :_Start
endlocal&set FID=%FID%
echo %FID%
pause

像这样的特殊角色怎么样

@echo off
:_Start
set /p "FID="
set FID="%FID:"=%"
setlocal EnableDelayedExpansion
for %%I in (^| ^& ^< ^> ^^ ^( ^) ' ` ^%% ^") do set FID=!FID:%%I=!
setlocal DisableDelayedExpansion
set FID="%FID:!=%"
endlocal&set FID=%FID:~1,-1%
:_Back
set _Flag1=
for /f "tokens=1* delims=~=*;,?-+\/.@#${}[]:    " %%J in ('echo !FID!') do (
  set FID=%%J%%K
  set _Flag1=%%J
  set _Flag2=%%K
)
if NOT "%_Flag2%"=="" goto :_Back
if NOT defined _Flag1 goto :_Start
endlocal&set FID=%FID%
echo %FID%
pause

我认为没有必要投反对票。他特别询问如何检测。我的解决方案正是如此。我认为没有必要投反对票。他特别询问如何检测。我的解决方案就是这样。感谢这个解决方案,我正在尝试在.bat中重建一个类似cmd的程序。你认为我还应该看更多的命令吗?这帮了大忙,谢谢!如果您试图用纯批处理编写整个程序,请不要这样做。因为它不像c/c/c++那样快速或有用。不过,如果你想玩得开心,你可以试试。有一些很好的游戏,比如使用批处理的SokoBox。顺便说一句,如果此帖子有用,请向上投票和/或单击
e复选标记。感谢这个解决方案,我正在尝试在.bat中重建一个类似cmd的程序。你认为我还应该看更多的命令吗?这帮了大忙,谢谢!如果您试图用纯批处理编写整个程序,请不要这样做。因为它不像c/c/c++那样快速或有用。不过,如果你想玩得开心,你可以试试。有一些很好的游戏,比如使用批处理的SokoBox。顺便说一句,如果这篇文章有用,请投赞成票和/或单击复选标记。对不起,我没有那么具体!我只希望能够检测到是否按下了某个字符,在本例中为a。。用于文件扩展名。我来测试一下,谢谢!嘿,Magoo,你的脚本搞乱了我的电脑,现在我所有的文件都被隐藏了,所以重复这个练习,但是使用-h代替+h-显示了我为什么使用echocommand进行测试…你的代码可能无法正确检测变量的原因是什么?我已经确定它被正确地实现了,代码有问题……好的,这是我的代码,不确定我是否正确地实现了它,我想没有,有什么帮助吗?对不起,我没有那么具体!我只希望能够检测到是否按下了某个字符,在本例中为a。。用于文件扩展名。我来测试一下,谢谢!嘿,Magoo,你的脚本搞乱了我的电脑,现在我所有的文件都被隐藏了,所以重复这个练习,但是使用-h代替+h-显示了我为什么使用echocommand进行测试…你的代码可能无法正确检测变量的原因是什么?我已经确定它被正确地实现了,代码有问题……好的,这是我的代码,不确定我是否正确地实现了它,我想没有,有什么帮助吗?