Как запустить скрипт PowerShell из окна консоли, если в пути поиска есть буквы Å, Ä или Ö?
4384
Samir
Когда я щелкаю правой кнопкой мыши по script.ps1файлу и выбираю «Запускать с PowerShell», открывается окно консоли PS, и по какой-то причине мой сценарий не запускается. Таким образом, я получаю сообщение об ошибке, но не могу прочитать сообщение, потому что окно закрывается сразу после появления ошибки.
Поэтому я хотел бы открыть новое окно консоли PowerShell, перейти к файлу сценария, запустить его и, надеюсь, на этот раз получить удовольствие от чтения глупого сообщения об ошибке. Так как мне запустить скрипт из окна консоли?
Версия ОС: Windows 8.0
PS версия: 3.0
Простой ввод script.ps1или предлагаемый ".\script.ps1"просто ничего не делает.
Так что я полагаю, что нужно получить какую-то команду? Сценарий очень прост, он должен создавать новые папки и называть их, читая Export.txtфайл.
Заметка! Обратите внимание, что приведенное выше сообщение об ошибке (скриншот) не относится к запуску самого скрипта. Единственный способ запустить сценарий - щелкнуть правой кнопкой мыши файл сценария в Проводнике и выбрать «Запуск с PowerShell», и ошибка, которую я получаю при его запуске, отличается от той, которую вы видите здесь выше.
Обновить! Смотрите мой второй комментарий ниже. Для путей, как C:\test\script.ps1это делает работу с .\script.ps1. Мне по-прежнему нужна помощь по запуску файла сценария PS, когда путь к файлу сценария включает в себя такие буквы, как Å, Ä и Ö.
Обновление - Е, А и Е ломает PS
Как я уже сказал, у меня, похоже, проблемы с этими персонажами в PS. Вот почему я изначально думал, что я делаю это неправильно. Итак, здесь я приведу два примера, чтобы продемонстрировать это.
Очевидно, что скрипт работает. Однако он создает только 116 папок из 245 папок, которые он должен создать. Это может быть связано с самим сценарием. Это пропускаемые строки, такие как 002 Långflonи 003 Källegrafsrösпотому, что они содержат буквы Å, Ä и / или Ö. Есть идеи? Но дело в том, что скрипт работает в окне консоли PS, как и ожидалось.
Выполнение одного и того же сценария PS с Å, Ä и Ö
Я намеренно добавил Ä в имя папки. Так testбыл переименован в täst. Я обновил файл скрипта этими изменениями, и теперь это мой скрипт.
PS C:\täst> .\script.ps1 get-content : Cannot find path 'C:\täst\Export.txt' because it does not exist. At C:\täst\script.ps1:4 char:1 + get-content $txtFile | %{ + ~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : ObjectNotFound: (C:\täst\Export.txt:String) [Get-Content], ItemNotFoun + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetContentCommand PS C:\täst>
Не удается найти путь 'C: \ täst \ Export.txt', поскольку он не существует.
Как видите, он пытается найти путь, которого там нет. Точка доказана. Персонажи Å, Ä и Ö ломают PS! Но почему? Что я делаю, что так неправильно? ...
Не используйте кавычки при вводе `. \ Script.ps1`. Это просто повторило бы вашу команду.
Ashtray 10 лет назад
0
Так `. \ Script.ps1` запустит его? Но говорит `type". \ Script.ps1 "` и это значит включать кавычки, нет?
Samir 10 лет назад
0
Ой! Так что это ** работает ** тогда. Спасибо! Просто ** он ** не работает с моим собственным путем поиска. У меня есть `\\ FILESERVER \ path \ path \ path`, смонтированный как диск` Z: `. Он включает в себя букву ** Ä **, и это достаточная причина, чтобы PS не работал? Кажется, эти письма совсем не нравятся. Приведенный выше сценарий даже не хочет создавать новые папки, если в имени заданы буквы Å, Ä и Ö.
Samir 10 лет назад
1
Так что я не совсем уверен, что это отвечает на мой вопрос, это вроде ... вроде ... работает с `. \ Filename.ps1`, если путь не включает в себя такие символы, как ** Ä **.
Samir 10 лет назад
0
Вы можете найти эту статью полезной: http://technet.microsoft.com/en-us/library/ee176949.aspx
wmz 10 лет назад
0
@Sammy Причина, по которой скрипт не создает некоторые папки, заключается в том, что я создал оригинальный скрипт, чтобы он соответствовал только тем именам, которые вы сначала указали (т. Е. 3 цифры, пробел, а затем символы z). Смотрите обновленный ответ на ваш оригинальный вопрос для шаблона, который соответствует всем вашим именам. http://superuser.com/questions/722372/how-to-create-multiple-folders-and-name-them-by-reading-lines-from-text-file/722379#722379
Martin 10 лет назад
0
@ Martin Да, я могу подтвердить, что ваш скрипт теперь работает и на этом компьютере с Windows 8. Но я немного запутался здесь ... Я вчера проверил ваш оригинальный скрипт на моем компьютере с Vista, и он сработал. Хотя я не уверен, что он создал все папки, но создал много, поэтому я не считал. Какая разница, если это Windows Vista или Windows 8? ... Кроме того, это, по крайней мере, частично проблема кодирования или нет? Смотрите мои комментарии к ответу UnlimitedInfinity ниже.
Samir 10 лет назад
0
@ Сэмми, проблема с европейскими символами решается с помощью кодирования вашего скрипта в ANSI. Вам нужно использовать другой «шаблон соответствия» для извлечения имен файлов из вашего ввода, как в ответе Мартина (в другом посте).
UnlimitedInfinity 10 лет назад
0
Новый скрипт Мартина работает. Однако он работает из `C: \ test` и из` Z: \ test`, но не из `Z: \ S_Värmland \ test`. C - это мой локальный диск, а Z - это сетевое расположение (`\\ FILESERVER`), смонтированное как Z-диск. Так что, похоже, я прав насчет вопроса о пути поиска, ему не нравятся ** Ä ** в пути поиска?
Samir 10 лет назад
0
@ Самми, запусти `type theNewScriptName`. Вы видите умлаута или двух "странных" персонажей? Другими словами, вы уверены, что сохранили скрипт в ANSI?
UnlimitedInfinity 10 лет назад
0
3 ответа на вопрос
3
UnlimitedInfinity
Здесь вам, кажется, удалось ввести имя каталога, используя UTF-8 (набор символов):
$folder="C:\täst";
Умлаут хранится в скрипте в виде двух символов. Вот почему вы видите это как два символа в сообщении об ошибке:
get-content : Cannot find path 'C:\täst\Export.txt' because it does not exist.
Как именно вы «намеренно добавили Ä в имя папки»? Вы должны сделать это как ASCII, а не как UTF-8.
Отобразите ваш скрипт с помощью команды "type"; Я уверен, что вы увидите представление UTF, как в сообщении об ошибке. Ваш редактор отображает умлаут для вас, как вы ожидаете. Команда type [скорее всего] покажет умлаут в виде двух символов, как в сообщении об ошибке.
Убедитесь, что ваш редактор сохраняет чистый ASCII или ANSI.
Моим «редактором» был Windows Explorer. Если это поможет? Я просто переименовал папку из «test» в «täst» в Проводнике. Что касается сценария, он был сохранен с Notepad ++ с UTF без спецификации.
Samir 10 лет назад
0
@Sammy Используйте ANSI, а не UTF. В значительной степени ** никогда ** не сохраняйте скрипт в UTF. UTF для ваших данных, ANSI для ваших скриптов.
UnlimitedInfinity 10 лет назад
0
Как вы гарантируете, что «чистый ASCII» используется в Notepad ++? Я могу получить только ANSI, и, насколько я понимаю, это фактически версия ASCII для Microsoft. Но я могу ошибаться.
Samir 10 лет назад
0
@Sammy ANSI и ASCII достаточно похожи, поэтому я всегда считал их одинаковыми. Я только что спросил Google, и есть некоторые различия: http://www.differencebetween.net/technology/web-applications/difference-between-ansi-and-ascii/ Ответ теперь имеет оба.
UnlimitedInfinity 10 лет назад
0
@Sammy Чтобы сохранить как ANSI в Notepad ++, щелкните меню «Кодировка» -> «Кодировать в ANSI».
Martin 10 лет назад
1
Это было полезно до такой степени, что у меня теперь есть сценарий PS, создающий 237 папок из общего числа 245. Некоторые из них все еще пропускаются. Не знаю почему. Но наличие списка в UTF-8 (с BOM) и сценария в ANSI (ASCII) помогло.
Samir 10 лет назад
0
Полный список предметов в списке можно найти по адресу http://pastebin.com/SNde4bBN.
Samir 10 лет назад
0
Элементы, которые пропускаются из списка, это элементы с дополнительным пробелом, такие как `021 Södra Finnskoga`, в отличие от` 020 Rya`, который имеет только один пробел сразу после цифр.
Samir 10 лет назад
0
Это связано с моделью совпадения. Новый шаблон соответствия здесь: http://superuser.com/questions/722372/how-to-create-multiple-folders-and-name-them-by-reading-lines-from-text-file/722379#722379
UnlimitedInfinity 10 лет назад
0
1
and31415
Запуск скрипта PowerShell
Предположим, у вас есть скрипт PowerShell, который my script.ps1хранится в C:\Some folder. Чтобы запустить его, вы можете:
Перейдите к фактическому пути и затем выполните его:
cd "C:\Some folder" & ".\my script.ps1"
Выполните его, указав полный путь напрямую:
& "C:\Some folder\my script.ps1"
&является оператором вызова . В качестве альтернативы вы можете запустить его из обычной командной строки:
Я переписал скрипт так, чтобы он принимал два аргумента: входной файл (предполагается, что это текст, сохраненный как UTF-8) и папка назначения. Если кодировка не указана, по умолчанию используется ASCII.
Эй, это действительно удобно. Не знал об этом синтаксисе. Спасибо!
Ashtray 10 лет назад
0
Да, я сейчас проверил, `" .script.ps1`alone не работает. Но `&". \ Script.ps1 "` работает, как и `. \ Script.ps1`. Но это, однако, делает не помогите мне с проблемами, которые возникают у меня с символами Å, Ä и Ö. Почему PS не понимает эти символы? Я скоро опубликую обновление своего вопроса с примерами.
Samir 10 лет назад
0
Я обновил свой вопрос с примерами. Если вы можете расширить свой ответ и объяснить, как запускать сценарий в PS, когда в пути поиска есть символы, не входящие в ASCII, я мог бы принять это как решение. Или это на самом деле связано с самим сценарием (`get-content $ txtFile`)?
Samir 10 лет назад
0
Вы имеете в виду как `get-content $ txtFile | % {} `? Это только выводит `mkdir" $ folder \ $ _ ";` многократно 245 раз в окне PS, это не создает никаких папок.
Samir 10 лет назад
0
Я заметил, что оригинальный сценарий не будет работать должным образом с такими вещами, как 021 Södra Finnskoga, потому что в названии есть пробел. В любом случае, имея скрипт типа `$ folder =" C: \ täst "; $ TxtFile = "C: \ Tast \ Export.txt"; get-content $ txtFile | % `у меня работает. Что вы используете для сохранения / редактирования скрипта и списка? Это похоже на проблему кодирования.
and31415 10 лет назад
0
Да. Это похоже на проблему с кодировкой. Пожалуйста, посмотрите мой ответ.
UnlimitedInfinity 10 лет назад
0
@ Сэмми Я обновил свой ответ, чтобы предоставить дополнительную информацию. Дайте мне знать, если у вас есть дальнейшие сомнения.
and31415 10 лет назад
0
-1
Infinum
Вы должны сохранить файл как UTF-8 с BOM - вы можете использовать Notepad ++. Powershell не работает и не может надежно читать файлы UTF-8 без спецификации.