PowerShell: получение каталога и синтаксическая ошибка - PullRequest
0 голосов
/ 21 февраля 2012

Немного предыстории ...
Я использую Windows XP, Vista и 7 довольно часто.Таким образом, мне постоянно приходится перемещать настройки моей программы из папки %appdata% на каждом ПК на следующий.Я подумал, что создание сценария PowerShell для меня и удаление папок после завершения будет чем-то, что облегчит мои проблемы.Поскольку я обычно работаю на флэш-накопителе, я надеялся использовать относительные пути, но, похоже, это доставляет мне немало хлопот, но самая большая проблема заключается в том, что я, кажется, недостаточно разбираюсь в Powershell, чтобы понять, в чем заключается ошибкаЯ делаю и как это исправить ... Итак, я пришел сюда.

Я подумал, что смогу разделить задачу на два сценария;один для размещения каталогов, а второй для копирования их обратно в исходную папку и удаления их следов позади.Я покажу тебе, что я хочу.Я подумал, что найти их может быть сложнее, поэтому я начал там.Вот что у меня так далеко.Я использую txt-файл, чтобы упростить обновление списка папок, которые я хочу или нужно перенести, поэтому на него также указывает переменная.

$fldrtxt = Get-Content .\FolderList.txt
$dirget = -LiteralPath ="'%appdata%'\$_fldertxt"
$dirpost = "./Current"
# get-command | Add-Content .\"$today"_CommandList.txt
Set-Location c: {get-content $_dirget} | %{ copy-item $_dirpost}

Я не могу заставить PowerShell распознавать то же самоеКоманда, которую я использую, когда использую утилиту запуска.Так как я уверен, что могу использовать %appdata% для ссылки, куда я хочу получить папки и откуда, как я могу написать этот скрипт, чтобы делать то, что я хочу?Я могу использовать абсолютный путь, потому что мне придется использовать отдельный скрипт для всех трех компьютеров.И что я не хочу.

Как я могу использовать PowerShell, чтобы делать то, что я хочу, и указывать папки, которые мне нужны?

1 Ответ

1 голос
/ 21 февраля 2012

Во-первых: проверить среду

Поскольку я уверен, что могу использовать% appdata% для ссылки, откуда я хочу получить папки, и тоже

Неправильный синтаксис для PowerShell, синтаксис %var% для переменных среды специфичен для сценариев cmd (и переносится из пакетных файлов MS-DOS).

В PowerShell для доступа к переменным среды добавьте к имени их префиксenv:, поэтому $env:AppData.

$_dirget = "$env:AppData\$_fldertxt"

Второе: передача параметров

Не включать имя параметра в переменную, переменная передается вКомандлет будет передан в качестве аргумента, а не имени параметра.Вам нужно:

get-content -LiteralPath $_dirget

(есть нечто, называемое "splat", которое позволяет использовать хеш-таблицы пар имя-аргумент параметра в качестве хеш-таблицы, но здесь это не нужно.)

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