2017-10-05 45 views
0

我正在尝试阅读网页上所有ZIP文件的列表,并将它们存储在文本文件中以供稍后下载。我不能使用任何第三方工具,因为这也需要在ARM系统和Windows 7上运行,因此只能在命令中构建。我使用批处理脚本,因为它在Windows中基本上是通用的。如何通过批量分割文本文件中极长的一行?

我通过获取网站,我得到了帮助,这里的HTML开始:How can I find the source code for a website using only cmd?

这给了我原始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文件名并将它们放入文件中。

+0

“*不知道是否有在PS一个简单的步骤,只是抓住所有的.ZIP文件名并将它们放在一个文件中。*“ - 非常,是的 - 'iwr https://www.faa.gov/air_traffic/flight_info/aeronav/digital_products/vfr/ | %链接|? OuterHTML -match'TIFF'| %href | sc zips.txt' – TessellatingHeckler

+0

我试图将其复制并粘贴到PowerShell中,但是我得到以下内容:术语'iwr'不被识别为cmdlet,函数,脚本文件或可操作程序的名称。 –

+0

做了一点搜索,看起来像我不能做Invoke-WebRequest,因为它不存在,直到PowerShell 3.0,Windows 7有PowerShell 2.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 
相关问题