Пакетный / командный скрипт для обновления в аргументы текстового файла - PullRequest
1 голос
/ 09 ноября 2019

У меня есть текстовый файл с содержимым example.txt

My name is {param1}
I live in {param2}
These are all the parameters passed to batch scripts {params}

Как мне написать и пакетный / shell-скрипт для передачи аргументов в файл example.txt

Ответы [ 2 ]

1 голос
/ 09 ноября 2019

Вам не нужно создавать текстовый файл. Я даю код пакетного файла для создания текстового файла и передачи ему аргументов.

@echo off
echo My name is %1 >example.txt
echo I live in %2 >>example.txt
echo These are all the parameters passed to batch scripts %* >>example.txt
goto :eof

Сохраните его как param.bat и запустите как param.bat param1 param2.

0 голосов
/ 09 ноября 2019

Предостережение : Используйте следующие решения только с входными файлами, которым вы доверяете , потому что можно вставлять произвольные команды в текст (предотвращение этого возможно, но требует больше работы)):

В сценарии PowerShell с именем, скажем, Expand-Text.ps1:

# Define variables named for the placeholders in the input file,
# bound to the positional arguments passed.
$param1, $param2, $params = $args[0], $args[1], $args

# Read the whole text file as a single string.
$txt = Get-Content -Raw example.txt

# Replace '{...}' with '${...}' and then use
# PowerShell's regular string expansion (interpolation).
$ExecutionContext.InvokeCommand.ExpandString(($txt -replace '\{', '${'))

вызов .\Expand-Text.ps1 a b c, а затем:

My name is a
I live in b
These are all the parameters passed to batch scripts a b c

В пакетном файле с именем, скажем, expandText.cmd, с использованием интерфейса командной строки PowerShell:

@echo off

:: # \-escape double quotes so they're correctly passed through to PowerShell
set params=%*
set params=%params:"=\"%

:: "# Call PowerShell to perform the expansion.
powershell.exe -executionpolicy bypass -noprofile -c ^
  "& { $txt = Get-Content -Raw example.txt; $param1, $param2, $params = $args[0], $args[1], $args; $ExecutionContext.InvokeCommand.ExpandString(($txt -replace '\{', '${')) }" ^
  %params%
...