MS DOS редактировать файл - PullRequest
0 голосов
/ 05 декабря 2008

Я пишу пакетный скрипт, который я хочу открыть файл, а затем изменить его вторую строку. Я хочу найти строку "cat" и заменить ее значением, которое у меня есть SET, т.е.% var%. Я только хочу, чтобы это произошло во второй строке (или в первые 3 раза). Как бы вы поступили так?

Ответы [ 4 ]

1 голос
/ 05 декабря 2008

Я просто решаю это сам. Он будет искать переменную только во второй строке.

@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).

0 голосов
/ 05 декабря 2008

Я бы создал скрипт, который бы:

  1. сканирование входного файла
  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)

0 голосов
/ 05 декабря 2008

Это было бы некрасиво делать с нативными пакетными сценариями. Я бы либо

  1. Сделайте это в VBScript. Если вам действительно нужно это в пакетном файле, вы можете вызвать файл VBScript из пакетного сценария. Вы даже можете передать% var% в качестве аргумента VBScript.

  2. Используйте скрипт sed. Есть порты Windows для команд Unix, таких как GnuWin32 , Утилиты GNU для Win32 (я их использую) или Cygwin .

0 голосов
/ 05 декабря 2008

Прежде всего, использование пакетного файла для достижения этой цели является грязным (ИМХО). Вам все равно придется использовать внешний инструмент для замены строки. Я бы использовал вместо этого некоторый язык сценариев.

Если вы действительно хотите использовать пакет, , это поможет вам начать работу.

...