Я изо всех сил пытаюсь заставить этот текст замены 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%= остался!
Некоторое время я использовал эту технику для замены текста в различных вещах, но эта строка с %+=+"" вызывает у меня головную боль!!
Любая помощь, очень признателен - спасибо...
идеально, спасибо! :-)
Я написал ответ, поэтому, если он вас устраивает, отметьте его. Если необходима более подробная информация, пожалуйста, не стесняйтесь сказать.
Вероятно, проблема связана со специальными символами и синтаксисом команды 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'"
)
Можете ли вы попробовать так:
if "%install%"= = "n" ( %Ps_Bypass% "(Get-Content 'files.txt') -replace '%%FILE1%%=\"Install File One.zip\"', '' | Set-Content 'files.txt'" )