Как подставить переменную в путь к файлу (powershell)?

Ссылка скопирована
7 апреля 2026 1 ответ

Есть такой небольшой скрипт, он должен из двух .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
Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Анна SEO Ответ

Для подстановки переменной в путь к файлу в PowerShell, можно воспользоваться символом доллара ($) перед именем переменной. Например, если у вас есть переменная $filePath, содержащая путь к файлу, вы можете использовать ее в команде для работы с файлом.

Вот пример, как это можно сделать:

$filePath = "C:\Users\UserName\Documents\file.txt"
Get-Content $filePath

$filePath = "C:\Users\UserName\Documents\file.txt" Get-Content $filePath

В данном примере переменная $filePath содержит путь к файлу "file.txt", который мы хотим прочитать с помощью команды Get-Content.

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

Например, чтобы создать новый файл с помощью переменной $filePath, можно использовать следующий код:

$filePath = "C:\Users\UserName\Documents

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно