我试图在文件中获取两部分字符串。为此,我需要在-
(空格 - 空间)之前和之后获取该部分。我尝试使用此代码:
@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
答案 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