Powershell para encontrar valor e criar arquivo

0

Eu sou novo no powershell, estava esperando por alguma ajuda. Eu estou procurando um comando powershell que irá pesquisar através de um arquivo e encontrar uma seqüência de caracteres e criar um arquivo com base nesse valor de seqüência que é encontrado.

O arquivo "abc.txt" tem uma sentença de palavras que se parece com isso, Conectado ao app \ prog01 . Mas algumas vezes esse arquivo "abc.txt" terá um número e um prog diferentes, como prog21 ou prog58.

Quando o comando for executado, se o abc.txt tiver Registrado no app \ prog58 , ele criará um arquivo simples chamado prog58 sem extensão.

    
por user4618954 02.10.2015 / 03:20

2 respostas

0

Você precisa do cmdlet Select-String , que é, por padrão, com alias como sls . Esse cmdlet permite que você corresponda a uma expressão regular e, em seguida, extraia a string correspondente. O comando completo é algo assim:

$(sls 'Logged into app\prog[0-9]+' 'abc.txt' -all).matches | foreach { $fn=$_.value.split('\')[1]; [System.IO.File]::Create($fn).close(); $fn }

Basicamente, para cada instância da string Logged into app\progX (onde X é um ou mais dígitos) que encontra no arquivo, ele leva o material para a direita do \ até atingir o final dos dígitos. , cria um arquivo com esse nome, fecha o arquivo sem gravar nele e ecoa esse nome para stdout (você pode remover a última parte se quiser).

    
por 02.10.2015 / 05:57
0

Eu sei que você pediu um comando do PowerShell, mas o que estou prestes a oferecer pode ser suficiente.

Ele funcionará em um shell Cmd.exe padrão, o que significa que você também pode executá-lo no PowerShell e será compatível com versões anteriores dos sistemas operacionais Windows mais antigos:

TYPE abc.txt | FIND "Logged into app\prog58" >NUL && IF NOT DEFINED %ERRORLEVEL% (TYPE NUL >prog58)

Eu posso estar entendendo mal a questão, no entanto. Você poderia esclarecer se é exatamente isso que você está procurando, ou se você está procurando criar um arquivo com o nome progXX baseado em qualquer texto existente em abc.txt?

Editar após o esclarecimento: O seguinte também é compatível com Cmd.exe e não é exclusivo do PowerShell, portanto, embora não possa ser usado como um de uma linha, ele pode ser chamado de script em lote simples:

@ECHO OFF
SETLOCAL && SETLOCAL EnableExtensions EnableDelayedExpansion
FOR /F "tokens=1-2 delims=\" %%A IN ('TYPE abc.txt ^| FINDSTR /C:"Logged into app\prog"') DO (SET FILENAME=%%B)
SET FILENAME=%FILENAME:~0,6%
TYPE NUL >%FILENAME%

Ressalva: isso depende de progXX ter exatamente 2 dígitos, portanto, progXXX não funcionaria.

    
por 02.10.2015 / 04:22