batchfile - 在for循环中替换中的通配符

时间:2015-12-10 11:57:30

标签: batch-file wildcard

我试图在文件中获取两部分字符串。为此,我需要在-(空格 - 空间)之前和之后获取该部分。我尝试使用此代码:

@echo off
SETLOCAL enabledelayedexpansion
for /F "tokens=*" %%A in (downloads.txt) do (
set str=%%A
echo !str!
set "string1=!str: - *=!"
set "string2=!str:* - =!"
echo "!string1!+!string2!"
)
pause

完整的输出应该是

  

someURL.com + some file.txt

但是,输出实际上是:

  

" someURL.com - 一些file.txt + some file.txt"

所以我的第一个字符串的替换代码显然有问题。我认为它与通配符有关,因为这是唯一不同的部分。

downloads.txt的内容如下所示:

  

someURL.com - some file.txt

修改

使用aschipfl的代码我用它修复了它:

@echo off
SETLOCAL enabledelayedexpansion
for /F "tokens=*" %%A in (downloads.txt) do (
set str=%%A
set "strR=!str:* - =!"
for /F "delims=*" %%f in ("!strR!") do set "strL=!str: - %%f=!"
set "strL=!strL: - =!"
echo "!strL!+!strR!"
)
pause

2 个答案:

答案 0 :(得分:1)

假设-部分仅出现一次,并且整个字符串不以*开头,您可以执行以下操作:

:SUB
set "strR=!str:* - =!"
set "strL=!str: - %strR%=!"
set "strL=!strL: - =!"

要在循环中使用它,您应将其放在子例程中并由call :SUB调用,因为还使用了立即%变量扩展。

该字符串不得包含=%!^,否则此方法将失败。

答案 1 :(得分:0)

您的问题是通配符只能用作要搜索的字符串的开头。

一个简单的,非防弹的解决方案(例如字符串中的=!*&字符可能是个问题),一旦你有正确的字符串部分,就可以删除它以获得左边的部分

@echo off
SETLOCAL enabledelayedexpansion
    for /F "delims=" %%A in (downloads.txt) do (
        rem Get the full string
        set "str=%%A"
        echo !str!

        rem Get the right part of the string
        set "string2=!str:* - =!"

        rem Get the left part of the string just removing the right part
        for /f "delims=" %%B in ("!string2!") do set "string1=!str: - %%B=!"

        echo "[!string1!] [!string2!]"
        echo(

    )
    pause