Перенаправление перенаправления с пакета на powershell - PullRequest
2 голосов
/ 26 марта 2019

Я использую командный файл для написания скрипта Powershell. Я понимаю, что это не самый предпочтительный метод, когда все это можно написать в Powershell, но я здесь.

В скрипте Powershell есть строка, которая должна перенаправлять соответствующий текст в выходной файл. Однако, поскольку я «пишу» сценарий Powershell из командного файла, я пытаюсь перенаправить строку, содержащую перенаправление, в сценарий.

Вот пример кода из пакетного файла:

Echo CLS >> Path\to\PowerShell\Script\example.ps1
Echo Echo "Please wait while we compare files" >> Path\to\PowerShell\Script\example.ps1
Echo Echo " " >> Path\to\PowerShell\Script\example.ps1
Echo $file1 = (Get-Content -Path Path\to\Footprint\File\footprint) >> Path\to\PowerShell\Script\example.ps1
Echo :sig ForEach ($Foot In $file1) >> Path\to\PowerShell\Script\example.ps1
Echo     { >> Path\to\PowerShell\Script\example.ps1
Echo         $Logfile = (Get-Content -Path Path\to\Log\File\Log.log) >> Path\to\PowerShell\Script\example.ps1
Echo         :log ForEach ($Line In $Logfile) >> Path\to\PowerShell\Script\example.ps1
Echo         { >> Path\to\PowerShell\Script\example.ps1
Echo          If (($Line -match $Foot)) >> Path\to\PowerShell\Script\example.ps1
Echo                 { >> Path\to\PowerShell\Script\example.ps1
Echo                     ECHO $Line >> Path\to\Output\File\Match.txt >> Path\to\PowerShell\Script\example.ps1
Echo                     ECHO "We have found a match!" >> Path\to\PowerShell\Script\example.ps1
Echo                     break log >> Path\to\PowerShell\Script\example.ps1
Echo                 } >> Path\to\PowerShell\Script\example.ps1
Echo         } >> Path\to\PowerShell\Script\example.ps1
Echo     } >> Path\to\PowerShell\Script\example.ps1
Echo Pause >> Path\to\PowerShell\Script\example.ps1

Разрывается на этой строке:

Echo                     ECHO $Line >> Path\to\Output\File\Match.txt >> Path\to\PowerShell\Script\example.ps1

Вот результирующий скрипт Powershell:

CLS 
Echo "Please wait while we compare files" 
Echo " " 
$file1 = (Get-Content -Path Path\to\Footprint\File\footprint) 
:sig ForEach ($Foot In $file1) 
    { 
        $Logfile = (Get-Content -Path Path\to\Log\File\Log.log) 
        :log ForEach ($Line In $Logfile) 
        { 
         If (($Line -match $Foot)) 
                { 
                    ECHO $Line 
                    ECHO "We have found a match" 
                    break log 
                } 
        } 
    } 
Pause 

Я пытался процитировать эту строку двойными и одинарными кавычками и пытался избежать перенаправлений, но безуспешно. Чего мне не хватает?

1 Ответ

0 голосов
/ 26 марта 2019

cmd.exe / пакетные файлы требуют, чтобы метасимволы оболочки, такие как > - если используется вне "..." (строки в двойных кавычках) - были индивидуально ^ 1010 * убежал *.

Примечание. При echo использование двойных кавычек на самом деле не вариант, поскольку двойные кавычки будут сохраняться в выходных данных .

Следовательно, поскольку Compo уже указано в комментарии, вы должны использовать:

Echo                     ECHO $Line ^>^> Path\to\Output\File\Match.txt >> Path\to\PowerShell\Script\example.ps1

Также стоит указать, что вывод echo будет включать любые пробелы до > или >> в перенаправленном выводе.

Например, echo hi > test.txt запишет строку hi - запишите завершающий пробел - в файл test.txt

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...