3

input.txtで検索したいファイルとmystringを見つけたい文字列を呼び出します。

input.txt (実際のinput.txt)のコンテンツの例

randomstring1<>"\/=:
randomstring2<ORIGINAL>mystring</ORIGINAL>randomstring3
  • mystring<ORIGINAL>は文字列に囲まれているため</ORIGINAL>、検索する必要があります
  • 両方のタグの間の文字列ORIGINALをクリップボードにコピーする必要があります(|クリップを使用)
  • mystringとタグは1回だけ発生します。しかし、彼らは固定された位置を持っていません
  • すべての文字列に特殊文字を含めることができます(<、>、 "、\、/、=、:)

私は他の多くのSOの質問を読みましたが、正直に言うと、FORループとSETコマンドの構文は私にはあまりにも厄介でした。私のベストショットはFINDSTRコマンドだと思います。しかし、おそらく正規表現の助けを借りてそれも可能です。

VBscript、Powershell、SED、FART、AWK、grep、またはその他の追加ツールを使用したくありません。

解決策を投稿する場合は、親切にして難しい部分を説明してください。
私はそれを理解したいと思います、そして多分それは他の人にも役立つでしょう。

諦める前の最後の試みはこのtest.cmdでした

@echo off
set "x=randomstring1<>"\/=:randomstring2<ORIGINAL>mystring</ORIGINAL>randomstring3"
set "x=%x:*<ORIGINAL>=%"
set "x=%x:</ORIGINAL>*=%"
set  x=%x:~2%
echo %x%
pause
4

1 に答える 1

2
@echo off
rem Let findstr to find the LINE you want (only once):
for /F "delims=" %%a in ('findstr "<ORIGINAL>" input.txt') do set "line=%%a"
ECHO LINE: "%line%"
rem Change left delimiter by {
set "line=%line:<ORIGINAL>={%"
rem Change right delimiter by }
set "line=%line:</ORIGINAL>=}%"
ECHO STRING DELIMITED: "%LINE%"
rem Get second token delimited by { and }
for /F "tokens=2 delims={}" %%a in ("%line%") do set string=%%a
ECHO STRING: "%STRING%"
rem Copy string to clipboard
REM echo %string%| clip

出力:

LINE: "randomstring2<ORIGINAL>mystring</ORIGINAL>randomstring3"
STRING DELIMITED: "randomstring2{mystring}randomstring3"
STRING: "mystring"

オプションとして、行の先頭から左の区切り文字まで削除できます。

set "line=%line:*<ORIGINAL>=%"

...そして、最初のトークンを任意の区切り文字で区切って取得します(例:}):

for /F "delims=}" %%a in ("%line%") do set string=%%a
于 2013-01-06T03:56:20.647 に答える