Как подставить переменную в путь к файлу (powershell)?
Есть такой небольшой скрипт, он должен из двух .txt файлов брать данные и подставлять их в путь что бы попасть куда нужно.
$pc_number = (Get-Content C:testpc_name_stm.txt)
$user_name = (Get-Content C:teststm_name.txt)
New-Item -ItemType SymbolicLink -Path \$pc_numberc$Users$user_nameDesktopПолезные_ссылки_СТМ -Target \192.168.123.220SharedСТМПолезные_ссылки_СТМ
Всё отлично работает если я не использую переменные в пути, но когда их ставлю выдаёт ошибку
New-Item : Синтаксическая ошибка в имени файла, имени папки или метке тома
C:testtest1 — копия.ps1:3 знак:1
+ New-Item -ItemType SymbolicLink -Path \$pc_numberc$Users$user_nam ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [New-Item], Win32Exception
+ FullyQualifiedErrorId : System.ComponentModel.Win32Exception,Microsoft.PowerShell.Commands.NewItemCommand
Подскажите, с чем связано?
Дополнительно:
Попробуйте вывести собранный из переменных путь на экран - увидите, где что теряется.
Скорее всего вам нужно складывать в одну тестовую строку значение переменных и простой текст - для этого их надо складывать оператором типа "." - как минимум так работает в линуксах, может powershell тоже так обрабатывает строки
- Спасибо! Нашёл ошибку через echo, в .txt файле оставались пробелы лишние.
Только теперь другой вопрос образовался :D
Как сделать что бы переменные из .txt подставлялись поочерёдно, а не все подряд - IT_Otdel, можно парсить содержимое файла и делить на подстроки через разделитель, если переменные записаны через запятую или перевод строки
- IT_Otdel, А вы гарантируете что строка № 111 из первого файла точно соответствует строке № 111 из второго ?
как ?
Это наводящий вопрос к тому, что может, если у вас источник файлов один, надо сразу в источнике данные вместе склеивать, чтобы проще получилось. и через csv, например, обмениваться этой инфой, а не двумя отдельными файлами ?
- MaxKozlov, склеить данные в 1 файле звучит проще и логичнее, но я этого ещё не делал, не умею. Поэтому создал два разных файла и пытался сделать так. В них всего по +-25 строк и они соответствуют друг другу, проверено вручную
- IT_Otdel, Export-Csv/Import-Csv
# Создание csv 1..10 | Foreach-Object { #Здесь будут ваши непонятно откуда полученные значения. у меня это просто цифры # Ну или делаете его в excel, тогда надо будет обратить внимание на символ разделитель (-Delimiter) [PSCustomObject]@{ Name = "Name $_" Description = "Value $_" } } | Export-Csv -path d:test.csv -Encoding utf8 # Чтение и использование Import-Csv -Path d:test.csv | Foreach-Object { #Сюда подставляете нужные вам команды Write-Host "Для имени $($_.Name) описание $($_.Description)" }# Создание csv 1..10 | Foreach-Object { #Здесь будут ваши непонятно откуда полученные значения. у меня это просто цифры # Ну или делаете его в excel, тогда надо будет обратить внимание на символ разделитель (-Delimiter) [PSCustomObject]@{ Name = "Name $_" Description = "Value $_" } } | Export-Csv -path d:test.csv -Encoding utf8 # Чтение и использование Import-Csv -Path d:test.csv | Foreach-Object { #Сюда подставляете нужные вам команды Write-Host "Для имени $($_.Name) описание $($_.Description)" }
Ответы:
Вам нужно почитать про одиночные и двойные кавычки в Powershell
- При использовании одинарных и двойных кавычек выходит такая же ошибка
- IT_Otdel, что в переменной - вы же смотрели через F8 в ISE?
Подозреваю, что еще нужно читать про ForEach в Powershell
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Для подстановки переменной в путь к файлу в PowerShell, можно воспользоваться символом доллара ($) перед именем переменной. Например, если у вас есть переменная $filePath, содержащая путь к файлу, вы можете использовать ее в команде для работы с файлом.
Вот пример, как это можно сделать:
$filePath = "C:\Users\UserName\Documents\file.txt" Get-Content $filePath
В данном примере переменная $filePath содержит путь к файлу "file.txt", который мы хотим прочитать с помощью команды Get-Content.
Также можно использовать переменные в пути к файлу при создании нового файла, копировании, перемещении и других операциях с файлами.
Например, чтобы создать новый файл с помощью переменной $filePath, можно использовать следующий код: