Powershell заменяет строку процентами и котировками

Я изо всех сил пытаюсь заставить этот текст замены PowerShell (команда в пакете) работать;

@echo off
pushd %~dp0
setlocal EnableDelayedExpansion

::enable PS commands in batch
set "Ps_Bypass=PowerShell.exe -NoProfile -ExecutionPolicy Bypass -Command"

set /p install=Add File1..(y)es (n)o:
if "%install%"= = "n" %Ps_Bypass% "(gc "files.txt") -replace '%FILE1% = "Install File One.zip"', ''" ^| Set-Content files.txt

Если пользователь нажимает «Нет», запись %FILE1%="Install File One.zip" необходимо удалить из файла files.txt, в противном случае оставьте список выбранных файлов для другой программы.

Есть еще несколько строк, такие же, только имена файлов разные.

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

Я пробовал добавлять обратные галочки, обратную косую черту, морковь перед % + =, а также двойные кавычки. Самое близкое к удалению текста Install File One.zip, но %file1%= остался!

Некоторое время я использовал эту технику для замены текста в различных вещах, но эта строка с %+=+"" вызывает у меня головную боль!!

Любая помощь, очень признателен - спасибо...

Можете ли вы попробовать так: if "%install%"= = "n" ( %Ps_Bypass% "(Get-Content 'files.txt') -replace '%%FILE1%%=\"Install File One.zip\"', '' | Set-Content 'files.txt'" )

Milos Stojanovic 15.06.2024 17:15

идеально, спасибо! :-)

Tika9o9 15.06.2024 20:09

Я написал ответ, поэтому, если он вас устраивает, отметьте его. Если необходима более подробная информация, пожалуйста, не стесняйтесь сказать.

Milos Stojanovic 15.06.2024 20:35
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
3
60
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вероятно, проблема связана со специальными символами и синтаксисом команды PowerShell.

При использовании % в команде PowerShell в пакетном скрипте вам необходимо удвоить знак % (%%), чтобы переменная интерпретировалась правильно. Кроме того, вам необходимо убедиться, что строки и пути правильно заключены в кавычки, чтобы избежать проблем с пробелами или специальными символами. Измененный скрипт будет выглядеть так:

@echo off
pushd %~dp0
setlocal EnableDelayedExpansion

::enable PS commands in batch
set "Ps_Bypass=PowerShell.exe -NoProfile -ExecutionPolicy Bypass -Command"

set /p install=Add File1..(y)es (n)o:

if "%install%"= = "n" (
    %Ps_Bypass% "(Get-Content 'files.txt') -replace '%%FILE1%%=\"Install File One.zip\"', '' | Set-Content 'files.txt'"
)

Другие вопросы по теме