Я ищу способ удалить все комментарии из файла. Есть различные способы сделать комментарии, но меня интересуют только простые #
комментарии формы. Причина в том, что я использую <# #>
только для функции .SYNOPSIS
, которая является функциональным кодом, а не просто комментарием, поэтому я хочу оставить их).
РЕДАКТИРОВАТЬ: Я обновил этот вопрос используя ответы ниже или, возможно, с пробелами раньше, т. е. регулярное выражение ^\s*#
, кажется, работает.
b) с некоторым кодом в начале строки, а затем с командой в конце строки. Я хочу избежать удаления строк, например, Write-Host "#####"
, но я думаю, что это отражено в моем коде.
Мне удалось удалить комментарии в конце строки с разделением, так как я не смог узнать, как это сделать с помощью регулярных выражений, кто-нибудь знает способ достичь этого с помощью регулярных выражений?
Разделение не было идеальным, поскольку <#
на линии удалялось бы -split
, но я исправил это, разделив на " #"
. Это не идеально, но может быть достаточно хорошо - может быть, существует более надежный способ регулярных выражений?
Когда я выполняю нижеприведенный сценарий с моим сценарием длиной 7 000 строк, он работает (!) И отбрасывает огромное количество комментариев. , НО, размер выходного файла почти удвоился (!?) с 400 КБ до 700 КБ. Кто-нибудь понимает, почему это происходит и как это предотвратить (это как-то связано с спецификацией или Unicode или подобными вещами? Похоже, что Out-File действительно увеличивает размер файла!)
$x = Get-Content ".\myscript.ps1" # $x is an array, not a string
$out = ".\myscript.ps1"
$x = $x -split "[\r\n]+" # Remove all consecutive line-breaks, in any format '-split "\r?\n|\r"' would just do line by line
$x = $x | ? { $_ -notmatch "^\s*$" } # Remove empty lines
$x = $x | ? { $_ -notmatch "^\s*#" } # Remove all lines starting with ; including with whitespace before
$x = $x | % { ($_ -split " #")[0] } # Remove end of line comments
$x = ($x -replace $regex).Trim() # Remove whitespace only at start and end of line
$x | Out-File $out
# $x | more