2017-10-05 1 views
0

J'essaie de lire une liste de tous les fichiers ZIP sur une page Web et de les stocker dans un fichier texte pour les télécharger plus tard. Je ne peux pas utiliser d'outils tiers, car cela doit également fonctionner sur un système ARM ainsi que Windows 7, donc intégré dans les commandes uniquement. J'utilise un script batch car il est fondamentalement universel dans Windows.Comment diviser une ligne extrêmement longue dans un fichier texte par lots?

J'ai commencé par obtenir le code HTML du site, que je suis aide ici: How can I find the source code for a website using only cmd?

Cela me donne le HTML brut, que je puis filtre avec FINDSTR

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

La prochaine L'étape consistait à analyser ce fichier pour les noms de fichiers réels, mais j'éprouve des difficultés car la page Web utilise une table pour lister les fichiers, ce qui se traduit par plusieurs lignes de plus de 19k caractères. Quand j'essaye de l'analyser avec une boucle FOR, il ignore simplement ces lignes. Je n'arrive pas à comprendre comment raccourcir cette ligne ou la diviser en lignes plus courtes par un délimiteur, j'ai même essayé de faire le fichier PS1 ci-dessous, mais je ne sais rien sur les scripts PowerShell et je n'arrive pas à le faire fonctionner.

[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 
    } 
} 

J'essaie alors de courir dans le fichier batch:

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

Cela me donne une erreur disant que je manque un} à la fin.

Je sais qu'après avoir recherché sur ce site un peu que CMD a une limite variable de 8196 caractères, que ces lignes dépassent, d'où l'échec ... Et je suis sûr que je suis juste en train de complètement bousiller le code PS . Après que je peux diviser ces grandes lignes en plus petites, j'ai déjà un code malicieux qui fonctionne pour obtenir les noms de fichiers dans un seul fichier TXT. Je ne sais pas s'il y a une étape facile dans PS pour attraper tous les noms de fichiers .ZIP et les insérer dans un fichier.

+0

« * Je ne sais pas s'il y a un pas facile dans PS pour saisir simplement toutes les .ZIP noms de fichiers et les enfoncer dans un fichier. * "- à peu près, oui -' iwr https://www.faa.gov/air_traffic/flight_info/aeronav/digital_products/vfr/ | % des liens |? OuterHTML -match 'TIFF' | % href | sc zips.txt' – TessellatingHeckler

+0

J'ai essayé de copier et coller cela dans PowerShell, mais voici ce que j'ai obtenu: Le terme 'iwr' n'est pas reconnu comme le nom d'une cmdlet, d'une fonction, d'un fichier de script ou d'un programme utilisable. –

+0

A fait une petite recherche, semble que je ne peux pas faire Invoke-WebRequest, car il n'existe pas jusqu'à ce que PowerShell 3.0, Windows 7 a PowerShell 2.0. –

Répondre

0

Le commentaire de Aacini me conduisent à une série de liens qui m'a finalement apporté à ce lien: http://www.dostips.com/forum/viewtopic.php?f=3&t=6044

Il est pour un script batch appelé JREPL. Je suis en mesure d'exécuter la série de commandes pour me laisser avec un fichier TXT seulement les liens vers les fichiers 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