заменить символы в файле TXT, используя пакет? - PullRequest
0 голосов
/ 19 августа 2011

Я не знаю, возможно ли это, но я хотел бы создать пакет, который заменяет все обратные слеши, содержащиеся в текстовом файле (C: \ location), на прямые косые черты.

THX..

РЕДАКТИРОВАТЬ:

Я пытаюсь зациклить:

set str1=!Var1!
echo.%str1%
set str1=%str1:\=/%

, чтобы работать вместе с:

set file=C:\text1.txt
FOR /F %%i IN (%file%) DO (
set username=%%i
echo (load "%%i") >> C:\text.txt
)

, что у меня до сих пор:

ECHO Retreving list of files...
dir /s /b c:\ICT\AUTOCAD_2010\*.LSP > C:\BART1.txt

Echo Looping variables...
set file=C:\text1.txt
FOR /F %%1 IN (%file%) DO (
set fred=%%1
echo %%1 > C:\tempme.txt
)
set fred=C:\tempme.txt
set fred=%fred:\=/%
echo (load "%fred%") >> C:\text2.txt

however this returns:

(load "C:/tempme.txt")

, который неисправен.

Ответы [ 2 ]

1 голос
/ 19 августа 2011

Я немного смущен тем, что вы действительно хотите. В вашем примере кода есть FOR ... IN, который содержит только один файл в IN (), то есть содержимое %fred%. Затем вы записываете одно имя файла во временный файл. После этого у вас есть SET, который заменяет обратную косую черту на прямую косую черту в имени временного файла. Но это никогда не касается файлов.

Однако в вашем начальном сегменте вы хотите заменить обратную косую черту на прямую косую черту в файле. Так что я сосредоточен на этой части. Это будет сделано так:

@ECHO OFF

SETLOCAL EnableDelayedExpansion

REM Here's a backslash: \

FOR /F "delims=" %%a IN ('TYPE %0') DO (
    SET line=%%a
    ECHO !line:\=/!
)

Обратите внимание, что для простоты этот маленький пакетный файл анализирует себя (%0) и, следовательно, заменяет только одну обратную косую черту. Тем не менее, не стесняйтесь помещать любой файл рядом с TYPE.

EnableDelayedExpansion делает синтаксис с работой ! (см. SET /? для получения дополнительной информации о отложенном расширении). TYPE явно записывает файл в консоль. FOR /F "delims=" теперь получает выходные данные этой строки на строку (поскольку delims= не определяет разделитель для токенизатора FOR). Переменная line необходима, потому что я не думаю, что есть правильный способ заставить ECHO -линей работать с %%a.

Единственным недостатком является то, что это удалит все пустые строки из исходного файла. Я не знаю, если это проблема для вас.

1 голос
/ 19 августа 2011

Windows 'PowerSheel слишком ограничен для этого. Я предлагаю вам использовать язык сценариев, такой как Perl. Вот быстрый скрипт, который делает это:

my @file = <STDIN>;
my $text = join('', @file);
$text =~ s/\\/\//g;
print($text);

Вы можете запустить его как

perl foo.pl < example.txt > result.txt

Использование sed , как предложено Тиходромой, является еще одним очень хорошим вариантом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...