<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; WshShell.Run "cmd.exe … echo … | clip.exe" … — пробелы в конце строк]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=8557&amp;type=atom" />
	<updated>2013-08-20T09:55:58Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=8557</id>
		<entry>
			<title type="html"><![CDATA[Re: WshShell.Run "cmd.exe … echo … | clip.exe" … — пробелы в конце строк]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=74737#p74737" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>wisgest пишет:</cite><blockquote><p>А пример c WshShell.Exec(&quot;clip.exe&quot;) не работает?</p></blockquote></div><p>в тех версиях WSH, которые штатно стоят на Win98/Me (win98 — 5.0, WinMe — 5.1), метода .EXEC&nbsp; нет, поэтому там вываливается ошибка. .EXEC появился в WSH с версии 5.6, если поставить на Win98/Me WSH 5.6, то, наверное, работать будет, но проверять лень, да это и &quot;некошерно&quot; :) — я стараюсь обходиться штатными ср-вами.</p><div class="quotebox"><cite>wisgest пишет:</cite><blockquote><p>с помощью … (1)/(2)/(3)</p></blockquote></div><p>я хотел бы избежать создания вспомогательных файлов, поэтому вар-ты (1) и (2) были бы нежелательны… Вариант (3), извиняюсь за тупость (я в этом плохо разбираюсь) — не понял, что там вообще происходит? :( буду думать …</p>]]></content>
			<author>
				<name><![CDATA[EgorS]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=30564</uri>
			</author>
			<updated>2013-08-20T09:55:58Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=74737#p74737</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: WshShell.Run "cmd.exe … echo … | clip.exe" … — пробелы в конце строк]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=74733#p74733" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>EgorS пишет:</cite><blockquote><p>А можете тогда написать, как в Win98 вывести в буфер в несколько строк,</p></blockquote></div><p>А пример c <strong>WshShell.Exec(&quot;clip.exe&quot;)</strong> не работает<strong>?</strong><br /></p><div class="quotebox"><cite>EgorS пишет:</cite><blockquote><p>командой типа<br /></p><div class="codebox"><pre><code>WshShell.Run &quot;command.com /c echo что_то_там |clip.exe&quot;, 1, False</code></pre></div></blockquote></div><p>1) с помощью bat-файла с необходимыми командами ECHO:<br /></p><div class="codebox"><pre><code>command.com /c tmp.bat|clip.exe</code></pre></div><p>2) с помощью текстового файла с нужными строками:<br /></p><div class="codebox"><pre><code>command.com /c clip.exe&lt;tmp.txt</code></pre></div><p>3) без дополнительных файлов, направив на вход CLIP.EXE вывод самого скрипта, перезапустив скрипт с определённым ключом:<br /></p><div class="codebox"><pre><code>If WScript.Arguments.Named.Exists(&quot;echo&quot;) Then
    With WScript.StdOut
        .WriteLine &quot;Hello_1&quot;
        .WriteLine &quot;Hello_2&quot;
    End With
    WScript.Quit
End If

Set WshShell = CreateObject(&quot;WScript.Shell&quot;)
WshShell.Run _
  &quot;command.com /c cscript.exe &quot;&quot;&quot; &amp; WScript.ScriptFullName &amp; &quot;&quot;&quot; /echo |clip.exe&quot;, _
  1, False
</code></pre></div><p>— проверить не на чем.</p>]]></content>
			<author>
				<name><![CDATA[wisgest]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=3850</uri>
			</author>
			<updated>2013-08-20T09:04:42Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=74733#p74733</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: WshShell.Run "cmd.exe … echo … | clip.exe" … — пробелы в конце строк]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=74719#p74719" />
			<content type="html"><![CDATA[<p>Благодарю за подробные разъяснения!</p><div class="quotebox"><cite>wisgest пишет:</cite><blockquote><p>Не обнаружил.</p></blockquote></div><p>Извиняюсь, перепутал — CLIP.EXE для NT входит в Windows Server 2000 Resource Kit (а не в Server 2003). Я вообще когда-то давно скачивал эти Res-Kit&#039;ы для Win98/2000/2003 с какого-то сайта, где их установщики уже раздербанили, вынув оттуда отдельные тулзы, чтобы были под рукой, поэтому у меня в голове Res-Kit&#039;ы для Server2000/2003 представляются как одно и то же :)</p><div class="quotebox"><cite>wisgest пишет:</cite><blockquote><p>В DOS также нет скобок и «&amp;»</p></blockquote></div><p>Ой… Просто неохота было под Win98 проверять… А можете тогда написать, как в Win98 вывести в буфер в несколько строк, командой типа</p><div class="codebox"><pre><code>WshShell.Run &quot;command.com /c echo что_то_там |clip.exe&quot;, 1, False</code></pre></div><p>т.е. чтобы в итоге в буфере было:</p><div class="codebox"><pre><code>Hello1
Hello2</code></pre></div><p>ну итд.</p>]]></content>
			<author>
				<name><![CDATA[EgorS]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=30564</uri>
			</author>
			<updated>2013-08-20T05:18:40Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=74719#p74719</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: WshShell.Run "cmd.exe … echo … | clip.exe" … — пробелы в конце строк]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=74691#p74691" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>wisgest пишет:</cite><blockquote><p>Чтобы взять управление в свои руки следовало бы самому явно указать CMD.EXE с требуемой командной строкой, например:<br /></p><div class="codebox"><pre><code>cmd.exe /c (echo One^&amp;echo Two^&amp;pause)|more</code></pre></div><p>В исходном случае это должно выглядеть как<br /></p><div class="codebox"><pre><code>WshShell.Run &quot;cmd.exe /c cmd.exe /c (echo One^&amp;echo Two)|clip.exe&quot;</code></pre></div></blockquote></div><p>— на самом деле, в таком случае скобки уже и не нужны:<br /></p><div class="codebox"><pre><code>cmd.exe /c echo One^&amp;echo Two^&amp;pause|more</code></pre></div><div class="codebox"><pre><code>WshShell.Run &quot;cmd.exe /c cmd.exe /c echo One^&amp;echo Two|clip.exe&quot;</code></pre></div>]]></content>
			<author>
				<name><![CDATA[wisgest]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=3850</uri>
			</author>
			<updated>2013-08-19T06:25:43Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=74691#p74691</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: WshShell.Run "cmd.exe … echo … | clip.exe" … — пробелы в конце строк]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=74690#p74690" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>EgorS пишет:</cite><blockquote><p>как я понимаю, пробел добавляется из-за скобок</p></blockquote></div><p>Не совсем, — если было бы перенаправление в файл, а не в конвейер, то лишние пробелы бы не добавлялись. Дело в особенности перенаправления в конвейер ввода-вывода внутренних, и, как частный случай, составных команд CMD.EXE: для них создаётся отдельный процесс CMD.EXE, при этом строка команды переформатируется (действительно, составная команда могла быть расположена на нескольких строках, а надо переделать в одну) и может быть «украшена» дополнительными пробелами.<br />Можно проверить, введя в CMD.EXE команду:<br /></p><div class="codebox"><pre><code>(echo One&amp;echo Two&amp;pause)|more</code></pre></div><p>— и увидеть, что появился новый процесс с командной строкой (обратите внимание на пробелы):<br /></p><div class="codebox"><pre><code>C:\WINDOWS\system32\cmd.exe /S /D /c&quot; ( echo One &amp; echo Two &amp; pause )&quot;</code></pre></div><p>Чтобы взять управление в свои руки следовало бы самому явно указать CMD.EXE с требуемой командной строкой, например:<br /></p><div class="codebox"><pre><code>cmd.exe /c (echo One^&amp;echo Two^&amp;pause)|more</code></pre></div><p>В исходном случае это должно выглядеть как<br /></p><div class="codebox"><pre><code>WshShell.Run &quot;cmd.exe /c cmd.exe /c (echo One^&amp;echo Two)|clip.exe&quot;</code></pre></div><p>(ещё раз повторю: не укажи мы ещё один CMD.EXE, он всё равно будет запущен, но неподконтрольно нам).</p><div class="quotebox"><cite>EgorS пишет:</cite><blockquote><p>Во-вторых, про использование SET /P я знаю, но мне надо без него, так как в DOS (Win98) у SET ключа /P нет, я хочу универсальный способ для обоих OS</p></blockquote></div><p>В DOS также нет скобок и «&amp;».<br /></p><div class="quotebox"><cite>EgorS пишет:</cite><blockquote><p>она позволяет копировать окно CMD (или COMMAND.COM в сеансе DOS в Win98/Me) в буфер обмена.</p></blockquote></div><p>Ну, не окно, а свой входной поток, а CMD и COMMAND.COM вообще не при чём:<br /></p><div class="codebox"><pre><code>Set WshShell = CreateObject(&quot;WScript.Shell&quot;)
With WshShell.Exec(&quot;clip.exe&quot;).StdIn
    .WriteLine &quot;Hello_1&quot;
    .WriteLine &quot;Hello_2&quot;
    .Close
End With
</code></pre></div><div class="quotebox"><cite>EgorS пишет:</cite><blockquote><p>и для NT (входит, вроде, в Server2003 ResKit)</p></blockquote></div><p><a href="http://www.microsoft.com/en-us/download/details.aspx?id=17657">Не обнаружил</a>.</p>]]></content>
			<author>
				<name><![CDATA[wisgest]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=3850</uri>
			</author>
			<updated>2013-08-18T21:15:56Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=74690#p74690</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: WshShell.Run "cmd.exe … echo … | clip.exe" … — пробелы в конце строк]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=74392#p74392" />
			<content type="html"><![CDATA[<p>Ну хорошо, даже если с SET /P</p><div class="quotebox"><blockquote><p>Константа vbCrLf между переменными - все решает</p></blockquote></div><p>Это вот так? :</p><div class="codebox"><pre><code>WshShell.Run &quot;cmd.exe /C &lt;nul set /p &quot;&quot;=&quot; &amp; Text1 &amp; VbCrLf &amp; Text2 &amp; &quot;&quot;&quot; | CLIP&quot;</code></pre></div><p>у меня это ничего не решило: всё равно выводит в одну строку:</p><div class="codebox"><pre><code>Hello1Hello2</code></pre></div>]]></content>
			<author>
				<name><![CDATA[EgorS]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=30564</uri>
			</author>
			<updated>2013-08-10T20:04:34Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=74392#p74392</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: WshShell.Run "cmd.exe … echo … | clip.exe" … — пробелы в конце строк]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=74391#p74391" />
			<content type="html"><![CDATA[<p>Перенос строк - не проблема... Константа vbCrLf между переменными - все решает.. А вот без параметров set /p.. Подумать нужно..</p>]]></content>
			<author>
				<name><![CDATA[-TOXA-]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=28061</uri>
			</author>
			<updated>2013-08-10T18:59:37Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=74391#p74391</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: WshShell.Run "cmd.exe … echo … | clip.exe" … — пробелы в конце строк]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=74385#p74385" />
			<content type="html"><![CDATA[<p>Во-первых, ваш код (во всяком случае у меня) выводит в буфер (в смысле после вставки из буфера в Блокнот) всё в ОДНУ строку:</p><div class="codebox"><pre><code>Hello1Hello2</code></pre></div><p>А мне надо вот что: чтобы из скрипта VBS некая информация копировалась в буфер в виде НЕСКОЛЬКИХ строк и потом при вставке из буфера, например, в Блокнот по CTRL + V итп. в Блокноте было:</p><div class="codebox"><pre><code>Hello1_  -- без вот этих концевых пробелов!
Hello2_  -- без вот этих концевых пробелов!</code></pre></div><p>Во-вторых, про использование SET /P я знаю, но мне надо без него, так как в DOS (Win98) у SET ключа /P нет, я хочу универсальный способ для обоих OS, ну, или напишите, как сделать и для DOS, если знаете :)</p>]]></content>
			<author>
				<name><![CDATA[EgorS]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=30564</uri>
			</author>
			<updated>2013-08-10T15:50:50Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=74385#p74385</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: WshShell.Run "cmd.exe … echo … | clip.exe" … — пробелы в конце строк]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=74382#p74382" />
			<content type="html"><![CDATA[<p>У меня вот так все хорошо работает:<br /></p><div class="codebox"><pre><code>Text1 = &quot;Hello1&quot;
Text2 = &quot;Hello2&quot;

Set WshShell = CreateObject(&quot;WScript.Shell&quot;)
WshShell.Run &quot;cmd.exe /C &lt;nul set /p &quot;&quot;=&quot; &amp; Text1 &amp; Text2 &amp; &quot;&quot;&quot; | CLIP&quot;</code></pre></div>]]></content>
			<author>
				<name><![CDATA[-TOXA-]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=28061</uri>
			</author>
			<updated>2013-08-10T15:19:48Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=74382#p74382</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[WshShell.Run "cmd.exe … echo … | clip.exe" … — пробелы в конце строк]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=74378#p74378" />
			<content type="html"><![CDATA[<p>Извините, если коряво сформулировал заголовок, но суть проблемы следующая.</p><p>Есть такая утилита CLIP.EXE, она есть для DOS (входит в пакет Win98 Resource Kit) и для NT (входит, вроде, в Server2003 ResKit), она позволяет копировать окно CMD (или COMMAND.COM в сеансе DOS в Win98/Me) в буфер обмена. Так вот, я хотел узнать, как можно с её помощью выводить в буфер обмена несколько строк, например, чтобы в буфере оказалось:</p><p>Hello1<br />Hello2</p><p>Далее привожу примеры, там и опишу непонятки:</p><div class="codebox"><pre><code>&#039; ПРИМЕР 1: нет пробела (тут выводится одна строка, это просто для примера)
WshShell.Run &quot;cmd.exe /c echo Hello1|clip.exe&quot;, 1, False

&#039; ПРИМЕР 2: так в CLIP попадает только Hello2, поэтому приходится ставить скобки
WshShell.Run &quot;cmd.exe /c echo Hello1&amp;echo Hello2|clip.exe&quot;, 1, False

&#039; ПРИМЕР 3: ставлю скобки: (echo Hello1&amp;echo Hello2)
WshShell.Run &quot;cmd.exe /c (echo Hello_1&amp;echo Hello_2)|clip.exe&quot;, 1, False
&#039;
&#039; теперь (т.е. в Примере 3) выводится в принципе нормально:
&#039;
&#039;   Hello1_
&#039;   Hello2_
&#039;
&#039; но тогда в конце каждой строки почему-то появляются пробелы (для наглядности
&#039; я их обозначил тут символом подчёркивания &quot;_&quot;, но имеется в виду пробел)

&#039; ПРИМЕР 4: как я понимаю, пробел добавляется из-за скобок:
WshShell.Run &quot;cmd.exe /c (echo Hello1)|clip.exe&quot;, 1, False
&#039; тут пробел есть (а в Примере 1 его нет, отличия только в наличии тут скобок)</code></pre></div><p>Вопрос: как сделать так, чтобы в Примере 3 в конце строк не было дурацких пробелов?!</p>]]></content>
			<author>
				<name><![CDATA[EgorS]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=30564</uri>
			</author>
			<updated>2013-08-10T14:42:37Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=74378#p74378</id>
		</entry>
</feed>
