2017-04-18 67 views
0

我有一个文件名为file1.txt。 我想从文件中读取,如果文件名包含“xyz”字符串我需要运行一些命令,如果不是一些其他命令 无法做到这一点,需要你的帮助,尝试了很多方法,但无法弄清楚 这里的示例代码我想:比较字符串中的for(if语句))

@echo off 
setlocal EnableDelayedExpansion 

for /F "tokens=1,2,3 delims=" %%i in (file1.txt) do (
    set f=%%i 
    set z=XYZ 
    echo !f! >>test.txt 
    if /i "!f!" == "!z!" (
     echo matched >> test.txt 
    ) else ( 
     echo nomatch >> test.txt 
    ) 
) 
+0

要比较一个字符串是否包含另外一个,你可以做这样的:'如果==“列“STRING!”:%SUB% =!”在“!STRING!”中找到echo子字符串“%SUB%”,或者使用['find'命令](http://ss64.com/nt/find.html):'find“%SUB% “”file1.txt“(只返回'file1.txt'中包含'%SUB%'中子字符串的行;添加'/ I'选项来区分大小写搜索) – aschipfl

+0

很有意思在不到一小时内出现两个关于[同一主题](http://stackoverflow.com/q/43471346)的问题... – aschipfl

+0

[如何将命令行参数传递给批处理文件?]( http://stackoverflow.com/questions/26551/how-to-pass-command-line-parameters-to-a-batch-file) –

回答

0

要比较一个字符串是否包含另外一个,你可以做这样的(注意,这是不区分大小写的,因为基础sub-string expansion syntax是病例不敏感):

if "!STRING!"=="!STRING:%SUB%=!" echo Sub-string "%SUB%" NOT found within "!STRING!" 

在这里,上面的方法落实到你的脚本:

@echo off 
setlocal EnableExtensions DisableDelayedExpansion 

rem // Define constants here: 
set "_INFILE=file1.txt" 
set "_OUTFILE=test.txt" 
set "_SUBSTR=XYZ" 

>> "%_OUTFILE%" (
    for /F "usebackq tokens=1-3 delims=" %%L in ("%_INFILE%") do (
     set "LINE=%%L" 
     setlocal EnableDelayedExpansion 
     echo(!LINE! 
     if not "!LINE!"=="!LINE:%_SUBSTR%=!" (
      echo matched 
     ) else ( 
      echo nomatch 
     ) 
     endlocal 
    ) 
) 

endlocal 
exit /B 

另外,我改进了以下几件事:

  • 常数变量一样,在开始处预先确定;
  • 返回的文本只被重定向一次;用>代替>>覆盖已经存在的文件而不是附加到它;
  • delayed expansion在循环内切换,以免在文本中丢失感叹号;请注意,_SUBSTR中的字符串不得包含此类;
  • 脚本中使用的所有文件路径都包含在引号内;
  • 引用set语法在整个脚本中都使用;
  • 代码缩进用于提高可读性;

或者,你可以使用find command仅返回内file1.txt包含在%SUB%子串的那些行;添加/I选项做一个区分大小写的搜索:

find "%SUB%" "file1.txt" 
+0

谢谢@aschipfl。 。 :)我已经创建了批处理文件并且完美地工作。 。 – Soorajh

+0

只是一个简单的问题。 。 。这个批处理文件我只用于运行在工作目录中。 。如果我使用iexpress从这个批处理文件创建一个.exe。 。 。并将exe复制到我想要执行的文件夹的文件夹中,因为iexpress将它提取到某个临时文件夹,所以它不会发生。 。有没有解决这个问题的任何解决办法。我运行.exe文件的.bat文件也应该在同一个文件夹中执行。 。 。请让我知道,如果我需要发布这个作为一个不同的问题。再次感谢 – Soorajh

+0

您可以在相关变量中包含文件的路径,例如:'set“_INFILE = D:\ Data \ file1.txt”';或者将其更改为:'set“_INFILE =%〜1”',这样您就可以将(完整)文件路径作为第一个命令行参数传递给批处理文件... – aschipfl