49

これは私がやろうとしていることです:

(
@echo This is some code that is
@echo Important to echo exactly as-is
@echo Even if I use parenthesis
@echo for something (like this)
)|clip

それで、それをクリップボードにコピーしました。私は次のことを試しました:

(
@echo This is some code that is
@echo Important to echo exactly as-is
@echo Even if I use parenthesis
@echo for something ^(like this^)
)|clip

しかし、エラーが発生するため、これは WANTED 括弧にも影響するようです。これをテストするために、私は単純に次のことを行いました。

(
@echo This is some code that is
@echo Important to echo exactly as-is
@echo Even if I use parenthesis
@echo for something ^(like this^)
FFF
)|clip

おい!これはほとんど機能します。テキストは「this」の「s」までコピーされます。最後の括弧、または明らかに F はコピーしません。何か案は?

4

4 に答える 4

59

そこに3つのキャレットが必要であることは明らかです:-)

(
@echo This is some code that is
@echo Important to echo exactly as-is
@echo Even if I use parenthesis
@echo for something (like this^^^)
)|clip

なんで?それは少しトリッキーです...

最初にパーサーはブロックを解析し、その部分this^^^)this^)にエスケープします。括弧はここで初めてエスケープされました。

ただし、パイプを使用すると、完全なブロックが変換され、新しい cmd.exe インスタンスに転送されます。
C:\Windows\system32\cmd.exe /S /D /c" ( @ echo This is some code is ... & @ echo for something (like this^) )"

新しいインスタンスでは、閉じ括弧をエスケープする必要があります。
それで全部です!

詳細については、同様の質問を読むことができます
SO: パイプされたコードブロック内で遅延拡張が失敗するのはなぜですか

于 2012-10-19T14:52:17.453 に答える
1

カプセル化されたエコーで閉じ括弧を使用する必要がある場合の私の解決策は、スクリプトの先頭に %endPar% という名前の変数を作成することです。次のようなものです。

@set "endPar=)"
@echo This is some code that is>tmp
@echo Important to echo exactly as-is>>tmp
@echo Even if I use parenthesis>>tmp
@echo for something (like this%endPar%>>tmp
@type tmp|clip
@del tmp

少し変更して、2回テストしました。

このコードは単にエコーを tmp というファイルに出力し、ファイルの内容をクリップにパイプするだけで、必要な場所に貼り付ける準備が整います。

于 2015-12-04T03:45:25.313 に答える
1

トリプルキャレットは、すべての状況で機能するわけではありません。次のようにします。

IF EXIST file.txt (
ECHO ...OK
) ELSE (
ECHO TEST THIS: (SOME WORDING! ^^^)   > file.txt
)

file.txt の内容は次のとおりです。

TEST THIS: (SOME WORDING! ^)
于 2013-08-22T23:35:45.173 に答える