如何通过批处理在文本文件中拆分极长的行?

时间:2017-10-05 03:32:04

标签: powershell batch-file cmd

我试图读取网页上所有ZIP文件的列表,并将它们存储在文本文件中以便稍后下载。我无法使用任何第三方工具,因为这也需要在ARM系统和Windows 7上运行,因此只能内置命令。我使用批处理脚本,因为它在Windows中基本上是通用的。

我首先获取网站的HTML,我在这里获得了帮助:How can I find the source code for a website using only cmd?

这给了我RAW HTML,然后我用FINDSTR过滤

FINDSTR /I /C:.ZIP %~DP0FULLHTML.TXT>%~DP0ZIPLINES.TXT

下一步是解析该文件的实际文件名,但我遇到了困难,因为网页使用表格列出文件,导致多行长度超过19k字符。当我尝试使用FOR循环解析它时,它只是忽略这些行。我无法弄清楚如何缩短这条线或通过某些分隔线分成更短的线条,我甚至尝试制作下面的PS1文件,但我基本上都不了解PowerShell脚本并且似乎无法获得它工作。

[CmdletBinding()]
Param(
[Parameter(Mandatory=$True,Position=1)]
[string]$file,

[Parameter(Mandatory=$True,Position=2)]
[string]$newfile
)

$contents = Get-Content $file

foreach ($line in $contents)
{
    $splititems = $line.split("/")

    foreach ($line in $splititems)
    {
        $line | Out-File $newfile
    }   
}

然后我尝试在批处理文件中运行:

Powershell -ExecutionPolicy Bypass -File "%~DP0SPLIT.PS1" "%~DP0ZIPLINES.TXT" "%~DP0SPLITLINES.TXT"

这给了我一个错误,说我最后错过了一个}。

我知道在这个网站上搜索了一下,CMD的变量限制为8196个字符,这些行超过了,因此失败了...而且我确定我只是完全搞砸了PS代码。

在我可以将这些大线分成较小的一行之后,我已经有了一些混乱的代码,可以将文件名转换为单个TXT文件。不知道PS中只有一个简单的步骤就是抓住所有.ZIP文件名并将它们推送到文件中。

1 个答案:

答案 0 :(得分:0)

Aacini的评论引导我找到一系列链接,最终将我带到了这个链接:http://www.dostips.com/forum/viewtopic.php?f=3&t=6044

这是一个名为JREPL的批处理脚本。我能够运行以下一系列命令,只留下TXT文件只包含ZIP文件的链接:

CALL %~DP0JREPL.BAT "=" "\r\n" /X /L /F %~DP0FULLHTML.TXT /I /O %~DP0SPLITLINES.TXT
CALL %~DP0JREPL.BAT ">" "\r\n" /X /L /F %~DP0SPLITLINES.TXT /I /O -
FINDSTR /I /C:.ZIP %~DP0SPLITLINES.TXT>%~DP0ZIPFILES.TXT