批处理文件if命令;如果变量包含某个字符,有没有办法完成某个任务?

时间:2014-11-09 21:02:44

标签: file batch-file if-statement

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

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

IF /I %option%== ATTRIB +h

(我想检测是否有.被按下了 我希望.bat能够检测到除了Attrib +h之外还有其他内容,例如.,用于文件扩展名。因此,如果有一个文件,我不会再要求文件名,因为它不能正常运行!

以下是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的答案确实有帮助,但是如果我想要检测文件夹名称以及文件名,我会改变什么?

编辑:Ok Magoo,现在测试一下。

编辑:这并没有真正奏效,因为我试图找出变量是否包含某个字符,而不是整个变量是否=有效的文件/文件夹名称,但很好的尝试。会有点麻烦...感谢你的时间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>"
%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+-

3 个答案:

答案 0 :(得分:0)

通用公式为

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的命令后直接执行 - 这是echo %SSL...行。

echo "%SSL%"|find "." >nul
if errorlevel 1 (echo notfound) else (ATTRIB +h)

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

... else(attrib + h something)

something设置为隐藏。

除此之外 - 使用cmdattribpausebackup个关键字作为标签并不是一个好主意。它可能会在tyop的情况下造成损害。


sying 你想要做什么的好处,而不是你想做什么是什么。

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

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

其中echo可以是任何合法(系列)命令。

答案 1 :(得分:0)

对于所有特殊字符,这样的事情怎么样?

@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

答案 2 :(得分:-1)

用于在字符串中查找字符的VBA命令是INSTR,因此如果您正在寻找。例如,然后在VBA中可以使用INSTR。有两种方法可以做你想做的事:

  1. 编写INSTR的QBASIC或VBscript版本,然后从BATCH脚本中调用它
  2. 编写一个执行INSTR的批处理脚本。
  3. 如果您对第二个感兴趣,请查看http://www.dostips.com/forum/viewtopic.php?f=3&t=1986 它不像第一个那样有效,因为INSTR几乎是VBScript中的一个衬里,而批处理版本通过字符比较进行,但是如果你正在寻找一个只能批处理的解决方案想。