Вопрос: Как избежать этого дополнительного ввода ввода


Я хочу поместить результат команды в свой буфер обмена. Так как моя команда echo I love you.. Затем я выполняю это в своем CMD:

echo I love you.|clip

Но на самом деле я получу

Я люблю тебя. [Enter]

Дополнительный символ CR в моем буфере обмена. Как избежать этого? Кроме того, я могу назначить строку «Я люблю тебя». к переменной a«Когда я пытаюсь:

echo I love you.|set a=

не сможет этого сделать.

Может быть, я должен написать два вопроса. Но этот два вопроса очень похожи. Любое тело может мне помочь? Сейчас я в окнах 10.


0
2017-12-11 20:33


Источник




Ответы:


Редактировать
Используйте приглашение set / p для вывода текста без добавления cr / lf, как это всегда делает echo. Так:

set /P =I love you<Nul|clip

не будет добавлять cr / lf


Захват / синтаксический вывод команды

Предположим, вы хотите получить имя хоста из этого вывода ping:

> ping -4 -n 1 -a 127.0.0.1

Pinging Matar [127.0.0.1] with 32 bytes of data:
Reply from 127.0.0.1: bytes=32 time<1ms TTL=128

Ping statistics for 127.0.0.1:
    Packets: Sent = 1, Received = 1, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 0ms, Maximum = 0ms, Average = 0ms

Эта партия

For /f "tokens=2delims=[ " %%A in (
  'ping -n 1 -a 127.0.0.1^|find "["'
) do Echo %%A

Вернется

Matar

Эта партия будет хранить все непустые выходные строки в псевдо-массиве var и перечислить vars

@Echo off & Setlocal EnableDelayedExpansion
Set Cnt=100
For /f "delims=" %%A in ('Ping -4 -n 1 -a 127.0.0.1') Do (
  Set /A Cnt+=1
  Set a[!Cnt:~-2!]=%%A
)
Set a[

Вывод

a[01]=Ping wird ausgeführt für Matar [127.0.0.1] mit 32 Bytes Daten:
a[02]=Antwort von 127.0.0.1: Bytes=32 Zeit<1ms TTL=128
a[03]=Ping-Statistik für 127.0.0.1:
a[04]=    Pakete: Gesendet = 1, Empfangen = 1, Verloren = 0
a[05]=    (0% Verlust),
a[06]=Ca. Zeitangaben in Millisek.:
a[07]=    Minimum = 0ms, Maximum = 0ms, Mittelwert = 0ms

0
2017-12-11 20:47



На самом деле я знаю это, но выражение очень сложно, я просто использую echo ** чтобы имитировать мой вопрос. - yode
Я имею в виду, что вы не можете сделать первый шаг set love=mycommand :) - yode
Не так просто, как в Linux / Unix. Cmd.exe не обрабатывает многострочные вары. Вы должны использовать for /f для анализа вывода одной команды и ее обработки. - LotPings
О, не могли бы вы привести пример для этого? Я новичок в cmd.exe. А как насчет моего второго вопроса? Можем ли мы использовать «|» назначить переменную? - yode
@yode Я добавил пример, если его попросят, я подробно объясню. - LotPings