10

У меня есть файл .txt, в котором я хочу заменить строку aaa на bbb .

Я пробовал следующий код PowerShell:

Get-Content c:\1.txt | ForEach-Object { $_ -replace "aaa", "bbb" } | Set-Content c:\1.txt

Я получаю сообщение об ошибке, что 1.txt используется другим процессом. Что я делаю неправильно?

2 ответа2

16
(get-content c:\1.txt) | foreach-object {$_ -replace "prod", "qa1"} | set-content c:\1.txt

Скобки вокруг Get-Content гарантируют, что операция Get будет завершена до начала операции Set, без этого обе функции будут одновременно пытаться получить доступ к файлу.

0

Мне интересно, как получается, что когда я делаю полезный инструмент для кого-то, кто может отчаянно нуждаться в замене строки в файле и загрузке ее на бесплатном сайте загрузки, который можно загрузить бесплатно, действительно бесплатный инструмент, опять же, как Бывает, что я стал спамером ??? Я очень уважаемый, старый программист в моей стране, никто не называл меня спамером. Теперь я должен загрузить исходный код, чтобы сохранить свой престиж ...

Теперь я понял, что СООБЩЕСТВО - это робот, и это нормально для меня ...

Источник компилируется с FPC.

Program ReplaceString;
var
  fs,fd:file of char;
  rdchar:char;
  cnt1:byte;
  ocur:longint;
  instr,outstr,tempstr:string;

function fileexists(filename:string):boolean;
var
  f:file;
begin
  {$I-} assign(f,FileName);reset(f);close(f); {$I+}
  fileexists:=(ioresult=0) and (filename<>'');
end;

procedure chkstr;
var
  tmp1:char;
  numread,cnt2:byte;
begin
  numread:=1;
  tempstr[1]:=rdchar;
  repeat
    read(fs,tmp1);
    inc(numread);
    tempstr[numread]:=tmp1;
  until (numread=length(instr)) or (instr[numread]<>tempstr[numread]);
  if (numread<length(instr)) or (instr[numread]<>tempstr[numread]) then
    for cnt2:=1 to numread do begin
      tmp1:=tempstr[cnt2];
      write(fd,tmp1);
    end else begin
      for cnt2:=1 to length(outstr) do begin
        tmp1:=outstr[cnt2];
        write(fd,tmp1);
      end;
      inc(ocur);
      write('Occurrences: ',ocur);
      for cnt2:=1 to 20 do write(chr(8));
    end;
end;

begin
  writeln('File string replacer v.1.0 for WIN32 by Rares Atodiresei (P)2018');
  if paramcount<>3 then begin
    writeln('Usage: Repstr32.exe <infile> <target string> <replacement string>');
    halt(1);
  end;
  if not fileexists(paramstr(1)) then begin
    writeln('File ',paramstr(1),' does not exist.');
    halt(1);
  end;
  writeln;
  ocur:=0;
  write('Searching...');
  for cnt1:=1 to 15 do write(chr(8));
  instr:=paramstr(2);
  outstr:=paramstr(3);
  assign(fs,paramstr(1));reset(fs);
  assign(fd,'_'+paramstr(1));rewrite(fd);
  while not eof(fs) do begin
    read(fs,rdchar);
    if rdchar=instr[1] then chkstr else write(fd,rdchar);
  end;
  close(fd);close(fs);
  if ocur=0 then begin
    write('Target string not found.');
    for cnt1:=1 to 25 do write(chr(8));
    erase(fd);
  end else begin
    erase(fs);rename(fd,paramstr(1));
  end;
  writeln;writeln;writeln('Done.');
end.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .