CMD中的任务。
1)如何比较字符串是否在字符串中?我检查了手册here的“布尔测试”字符串是否存在?“”但是我无法理解这个例子或它对我不起作用。这段代码,只是一个尝试。如果某行中有标记<a>
,我会尝试对过滤器进行字符串比较。
FOR /f "tokens=* delims= usebackq" %%c in ("%source%") DO (
echo %%c
IF %%c == "<a" (pause)
)
因此,当我读取文件时,如果某一行上有链接,则应暂停。
2)我还有一个问题。如果链接中有特定文件,我需要过滤该行,并获取链接的内容。我最初的想法是尝试将findstr
与正则表达式一起使用,但似乎不使用子模式。接下来的问题是如何将结果变为变量。
set "pdf=0_1_en.pdf"
type "%source%" | grep "%pdf%" | findstr /r /c:"%pdf%.*>(.*).*</a>"
总而言之,我想浏览文件,如果有这样的链接:已修复: *
<a href="/Dokumenter/dsweb/Get/Document-408/EK_GEN_0_1_en.pdf" class="uline"><b>GEN 0.1 Preface</b></a>
获得标题GEN 0.1前言。但是你应该知道,同样的链接也有类似的链接,它们包含图像,而不是标记内的文本。
根据Aacini的代码稍作修改:
@echo off
setlocal EnableDelayedExpansion
set "source=GEN 0 GENERAL.html"
set "pdf=0_1_en.pdf"
echo In file:%source%
echo Look for anchor:%pdf%
rem Process each line in %source% file:
for /F "usebackq delims=" %%c in ("%source%") do (
set "line=%%c"
rem Test if the line contain a "tag" that start with "<a" string:
set "tag=!line:*<a=!"
if not "!tag!" == "!line!" (
rem Take the string in tag that end in ">"
for /F "delims=^>" %%a in ("!tag!") do set "link=%%a"
echo Link found: !link!
if "!link!" == "GEN 0.1 Preface" echo Seeked link found
)
)
pause
仍未完成
答案 0 :(得分:1)
虽然你的问题很广泛但并没有提供太多的细节,所以我假设了几点,因为我不太了解.PDF文件,标签等。
@echo off
setlocal EnableDelayedExpansion
set "source=GEN 0 GENERAL.html"
set "pdf=0_1_en.pdf"
echo In file: "%source%"
echo Look for anchor: "%pdf%"
rem Process each line in %source% file:
for /F "usebackq delims=" %%c in ("%source%") do (
set "line=%%c"
rem Test if the line contain "<a>" tag:
set "tag=!line:*<a>=!"
if not "!tag!" == "!line!" (
rem Test if "<a>" tag contain the anchor pdf file:
if not "!tag:%pdf%=!" == "!tag!" (
rem Get the value of "<b>" sub-tag
set "tag=!tag:<b>=$!"
set "tag=!tag:</b>=$!"
for /F "tokens=2 delims=$" %%b in ("!tag!") do set title=%%b
echo Title found: "!title!"
)
)
)
pause
如果您向我提供有关它们的详细信息,可以添加或修复任何缺失点。
编辑:我在OP的最后指示后修复了上面的程序。我使用$ character来获取Title值;如果此标记可能存在于原始标记中,则必须由另一个未使用的标记更改。
我用这个“GEN 0 GENERAL.html”示例文件测试了这个程序:
Line one
<a>href="/Dokumenter/EK_GEN_0_X_en.pdf" class="uline"><b>GEN 0.X Preface</b></a>
Line three
<a>href="/Dokumenter/EK_GEN_0_1_en.pdf" class="uline"><b>GEN 0.1 Preface</b></a>
Line five
得到这个结果:
In file: "GEN 0 GENERAL.html"
Look for anchor: "0_1_en.pdf"
Title found: "GEN 0.1 Preface"
编辑:添加了更快的方法
有一种更简单,更快速的方法可以解决这个问题,但如果一行包含多个标记,则可能会失败:
@echo off
setlocal EnableDelayedExpansion
set "source=GEN 0 GENERAL.html"
set "pdf=0_1_en.pdf"
echo In file: "%source%"
echo Look for anchor: "%pdf%"
for /F "delims=" %%c in ('findstr /C:"<a>" "%source%" ^| findstr /C:"%pdf%"') do (
set "tag=%%c"
rem Get the value of "<b>" sub-tag
set "tag=!tag:<b>=$!"
set "tag=!tag:</b>=$!"
for /F "tokens=2 delims=$" %%b in ("!tag!") do set title=%%b
echo Title found: "!title!"
)
pause
答案 1 :(得分:0)
首先,一个重要问题:这是否必须通过CMD脚本实现?您是否可以使用VBScript,PowerShell,C#或其他一些脚本/编程语言? CMD是一个臭名昭着的痛苦脚本环境。
其次,我不确定这是否能回答你的问题 - 这有点不清楚 - 但是这里有一个快速的技巧,你可以用它来查看CMD中是否包含另一个子字符串:
setlocal enableextensions enabledelayedexpansion
set PATTERN=somepattern
for /f "delims=" %%f in (somefile.txt) do (
set CURRENT_LINE=%%f
if "!CURRENT_LINE:%PATTERN%=!" neq "!TEMP!" (
echo Found pattern in line: %%f
)
)
您的想法是尝试执行字符串替换并查看是否有任何更改。这肯定是一个黑客攻击,如果你可以使用像findstr
或grep
这样的工具,那将是更好的选择,但是如果你的选择有限,那么上面的内容应该可行。
注意:我实际上并没有运行上面的脚本摘录,所以如果你有任何困难,请告诉我。
答案 2 :(得分:0)
我已经修改了这样做的方法。我意识到最好先找到pdf文件的名称。这是我几乎完成的解决方案,但我问你是否可以帮我解决最后一点。最后一个替换语句不起作用,因为我需要删除结束标记b。只是为了获得头衔。
@echo off
setlocal EnableDelayedExpansion
set "source=GEN 0 GENERAL.html"
set "pdf=0_1_en.pdf"
echo In file:%source%
echo Look for anchor:%pdf%
rem Process each line in %source% file:
for /F "usebackq delims=" %%c in ("%source%") do (
set "line=%%c"
REM Test if the line contains pdf file I look for:
SET "pdfline=!line:%pdf%=!"
if not "!pdfline!" == "!line!" (
cls
echo Line: !line!
REM Test if the pdfline contains tag b
SET "tagline=!pdfline:*><b>=!"
if not "!tagline!" == "!pdfline!" (
cls
echo ACTUAL LINE: !tagline!
REM Remove closing tag b
SET "title=!tagline:</b*=!"
echo TITLE: !title!
pause
)
)
)
pause
顺便说一句: 我使用的html页面是here。
所以我请你帮忙完成/修复专线SET "title=!tagline:</b*=!"