1

Мне вообще не нравится встроенный блокнот от Microsoft. Я предпочитаю использовать notepad++, но так как он не встроен, его нелегко использовать из командной строки. Я пишу сценарий PowerShell, который может помочь, вот что у меня есть:

Function Read ([string] $file)
{
$currentPath = (get-location).Path
cd "C:\program Files (x86)\Notepad++\"
.\notepad++.exe $file
cd $currentPath
}

Проблема в том, что мне приходится каждый раз вводить полный путь. Большую часть времени я нахожусь в том месте, где я хочу прочитать файл, поэтому было бы неплохо иметь возможность вызывать такую функцию:

read .\docu.txt

вместо: прочитайте C:\users\user\desktop\ documents.txt Я думал что-то вроде:

$fullPath = '$currentPath\$file'
.\notepad++.exe $fullPath

но потом, если я когда-нибудь наберу весь путь, он больше не будет работать, и это все равно не сработает, потому что это будет выглядеть как "C:\users\user\documents.\documents.txt" обрабатывать UNC пути. Когда я выбираю get-location оттуда, это выглядит как

Microsoft.Powershell.Core\FileSystem::\\server\drive

и я не могу заставить его работать.

2 ответа2

4

Это было бы прекрасным временем, чтобы использовать Regex. Здесь есть несколько проблем, поэтому давайте разберем их сверху донизу. Во-первых, вы должны уметь обрабатывать сетевые пути. Сделайте это, добавив следующее в начало вашего скрипта, чтобы устранить все лишние ошибки в пути

$UNCPath = $pwd.ProviderPath

Это даст вам только \\ сеть \ диск.

Теперь, чтобы обработать различные способы отправки информации в параметре $ file, используйте регулярные выражения для проверки того, что вы отправили.

$first = $file -match "\.\\" #does file contain .\ ?
$second = $file -match "\\"  #does file contain \ ?
if($first -eq $true)
{ #for instances when you sent in .\filename.txt
$subFile = $file.Substring(2) #Eliminate the .\ from the path
$completeFile = "$UNCPath\$subFile"
.\notepad++.exe $completedFile
}
else if($second -eq $true) #Contains \ but not .\ so you've sent the complete path
{
.\notepad++.exe $file   #easy when the full path is already sent
}
else
{  #You sent just the name of the document
$pathfile = $UNCPath + "\" + $file   #we assume if you just sent the name, the file is 
.\notepad++.exe $pathfile            #located at your current location
}
cd $currentPath
}
1

Я думаю, что вы делаете это сложнее, чем нужно. :)

1) Notepad++ загрузит файл на основе аргумента, имеет ли он путь, или нет, на основе стандартной системы путей Windows.

Поэтому Notepad++ file.txt откроет file.txt если он находится в локальной папке, а Notepad++ c:\path\file.txt откроет C:\path\file.txt , независимо от того, в какой папке вы находитесь.

2) Просто добавьте папку «Блокнот ++» в «Путь» системы, а затем введите «notepad ++ c:\path\file.txt`» в командной строке.

Если вы хотите, чтобы это было короче, создайте пакетный файл в папке Notepad++, возможно, с именем read.bat , и его содержимое будет просто выглядеть примерно так:

Notepad++.exe %1 %2 %3 %4 %5

Это должно позволить вам запустить read file.txt и / или read c:\pathto\file.txt .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .