0

ファイルを開いて2行目を変更したいバッチスクリプトを書いています。文字列「cat」を見つけて、SETの値(%var%)に置き換えたいと思います。私はこれを2行目(または最初の3回)でのみ発生させたいと思っています。これをどのように行いますか?

4

4 に答える 4

1

自分で解決するだけです。2 行目のみで var を検索します。

@echo OFF
SETLOCAL ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
SET filename=%1
set LINENO=0    
for /F "delims=" %%l in (%filename%) do (
 SET /A LINENO=!LINENO!+1
 IF "!LINENO!"=="2" ( call echo %%l ) ELSE ( echo %%l )
)

しかし、私は cscript (vbscript または jscript) を使用することを好みます。

于 2008-12-05T15:17:55.593 に答える
0

まず第一に、これを達成するためにバッチファイルを使用することは厄介です(IMHO)。文字列の置換を行うには、とにかく外部ツールを使用する必要があります。代わりにスクリプト言語を使用します。

本当にバッチを使用したい場合は、これで開始できます。

于 2008-12-05T14:14:30.120 に答える
0

これは、ネイティブバッチスクリプトでは見苦しいでしょう。私はどちらか

  1. これはVBScriptで行います。バッチファイルでこれが本当に必要な場合は、バッチスクリプトからVBScriptファイルを呼び出すことができます。VBScriptへの引数として%var%を渡すこともできます。

  2. sedスクリプトを使用します。GnuWin32GNU Utilities for Win32(私はこれらを使用)、CygwinなどのUnixコマンドのWindowsポートがあります。

于 2008-12-05T14:20:41.077 に答える
-2

次のようなスクリプトを作成します。

  1. 入力ファイルをスキャンします
  2. 2番目の出力ファイルに書き込む
  3. 入力を削除します
  4. 出力の名前を変更します

解析するdosコマンドに関しては、Google検索を実行して、適切な出発点を考え出しました。

@echo off
setlocal enabledelayedexpansion

set file=c:\file.txt
set output=output.txt
set maxlines=5000

set count=0

for /F "tokens=* usebackq" %%G in ("%file%") do (
 if !count!==%maxlines% goto :eof

 set line=%%G
 set line=!line:*000000000000=--FOUND--!
 if "!line:~0,9!"=="--FOUND--" (
  echo %%G>>"%output%"
  set /a count+=1
 )
)

(Intarwebnetから盗まれました)

于 2008-12-05T14:19:40.157 に答える