3

私はバッチ スクリプトが初めてで、改行で区切られたペアのキー値 (種類) を持つファイルを解析しようとしています。例えば:

the value of abc
1234
the value of def
5678
the value of ghi
9876

値にアクセスできるように、改行を区切ってこのファイルを読みたいと思います。

何かのようなもの

for /f "tokens=1,2,3 delims='\n'" %%i in ('findstr /C:the value of abc 'filepath') do echo %%j
4

6 に答える 6

4

オプションとしてここに入れただけです:

for /F delims^=^ eol^= %%i in ('findstr /C:the value of abc 'filepath') do echo %%i
于 2016-11-21T08:27:38.770 に答える
3

「改行」を区切り文字として設定することはできません。これを試して:

@echo off &setlocal
for /f "tokens=1*delims=:" %%i in ('findstr /NC:"the value of abc" "filepath"') do set /a count=%%i
if defined count for /f "skip=%count%tokens=1*delims=:" %%i in ('findstr /N "^" "filepath"') do if not defined value set "value=%%j"
echo.%value%
endlocal
于 2013-03-26T16:22:07.653 に答える
3
@ECHO OFF
SETLOCAL
SET "prevline="
FOR /f "delims=" %%z IN (tvabc.txt) DO (
 IF DEFINED prevline (
  FOR /f "tokens=1-6" %%a IN ('echo %%prevline%% %%z') DO (
   ECHO %%a %%b %%c %%d %%e %%f
   )
  SET "prevline="
  ) ELSE (SET prevline=%%z)
)

2 つの連続する行から各トークンを出力する必要がある場合は、ジョブを実行する必要があります。機能しないコードから推測するよりも、必要な出力のリストがあれば、はるかに簡単になります。

基本的に、このコードは 1 行の内容を保存し、前の行を保持する変数が定義されているという事実によって、2 番目の行が読み取られたことを検出します。このような状況でfor/fは、2 つの行の連結をトークン化するために使用されます。

于 2013-03-26T18:10:47.317 に答える
2

これらの名前/値のペアを取得した後で何をするかはわかりませんが、Powershell で行う場合は、正しく行い、オブジェクトの作成から始めます。

$file = 'c:\somedir\somefile.txt'

[regex]$regex = @'
(?ms)the value of (\S+)
(\d+)
'@

#Choose one
$text = Get-Content $file -Raw  # V3 Only
$text = [IO.File]::ReadAllText($file)  # V2 or V3


$regex.matches($text) |
foreach {
   New-object PSObject -Property @{
                                   Name = $_.groups[1].value
                                   Value = $_.groups[2].value
                                  }
        }|
  Select Name,Value |
  Format-Table -AutoSize

Name Value
---- -----
abc  1234 
def  5678 
ghi  9876 
于 2013-03-26T16:40:21.560 に答える
0

それについてどう思いますか?パワーシェルで:

(get-content .\essai.txt)[(Select-String .\essai.txt -Pattern "the value of abc").LineNumber]

パターンの次の行を表示します。

于 2013-03-26T16:22:52.733 に答える
0

私は通常、指定されたバッチコマンドを使用して、ファイルの各行を読み取ります

FOR /F "delims=" %%G IN (test.txt) DO (
    ECHO %%G
)

ここで"delim="、トリックを行います。

于 2019-11-02T15:05:42.567 に答える