我在路径d:\ test \中有一个名为test.txt的文本文件 此文件有不同的文本示例:
exampel blas asdlkwe3 asd f3 234 df
exampel blas asdlkwe3 asd f3 234 df
exampel blas asdlkwe3 asd f3 234 df
exampel blas asdlkwe3 asd f3 234 df
exampel blas asdlkwe3 asd f3 234 df
exampel blas asdlkwe3 asd f3 234 df
Presents: d:\test\asdf\bla
exampel blas asdlkwe3 asd f3 234 df
exampel blas asdlkwe3 asd f3 234 df
exampel blas asdlkwe3 asd f3 234 df
exampel blas asdlkwe3 asd f3 234 df
exampel blas asdlkwe3 asd f3 234 df
在文件test.txt中,如果一行包含“Presents:d:\ test \ asdf \ bla” 我需要d:\ test \ asdf \ bla作为变量。只有礼物:它总是一样的。下一个单词可以用其他东西
d:\ test \ addons \ sed.exe是正确的。
@echo off
if "%aufruf%"=="" (
SETLOCAL
)
set 1=
set file=d:\test\test.txt
for /f "delims=" %%a in ("d:\test\addons\sed.exe" -n /Presents:/P %|
"d:\test\addons\sed.exe" "s/Presents: //g" %file%) do set 1=%%a
echo %1%
pause
如下所示,输出为空:
d:\test>test2.bat
d:\_test>
答案 0 :(得分:1)
@echo off
if "%aufruf%"=="" (
SETLOCAL
)
set data=
set file=d:\test\test.txt
for /f "usebackq tokens=1*delims= " %%a in ("d:\test\test.txt") do if "%%a"=="Presents:" set data=%%b
echo %data%
pause
将空格(delims
值)上的文件分隔为标记;第一个转到%%a
,第二个转到%%b
。
如果%%a
为Presents:
,则将%%b
分配给data
。
显示data
答案 1 :(得分:0)
关于主题窗口/批处理文件解决方案:
使用sed(gnuwin32):
@echo off
set "data=n/a"
set "file=.\test.txt"
for /f "delims=" %%a in (
'sed -n "s/^Presents: //p" "%file%"'
) do set "data=%%a"
echo %data%
pause
纯批次替换三行for /f .. do
for /f "tokens=1* delims=: " %%a in (
'findstr /I "^Presents:" %file%'
) do set "data=%%b"
使用PowerShell替换三行for /f .. do
for /f "usebackq delims=" %%a in (
`powershell -NoP -C "sls '(?<=^Presents: )(.+)$' '%file%'|%%{$_.matches.groups[1].value}"`
) do set "data=%%a"
答案 2 :(得分:-1)
所以,如果你的机器上有unix风格的sed
,你为什么要写windows批处理文件?直接转到bash脚本并使用bash
代替cmd
运行它们。
无论如何,您需要先删除所有不相关的行,然后从剩余部分中删除Presents:
。
grep '^Presents: ' test.txt | sed 's/Presents: //'
我不熟悉cmd批处理文件,但shell脚本看起来像这样:
#!/bin/bash
magicstring="Presents: "
outvariable=$(grep "^$magicstring" < $1 | sed "s/$magicstring//")
echo $outvariable