Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Работа с txt-файлами (http://forum.oszone.net/showthread.php?t=207775)

vivera864864 29-05-2011 09:30 1684420

Работа с txt-файлами
 
В общем надо взять пути файлов из одного txt, взять их содержимое, вначале выставить номер по порядку и всунуть в другой файл без абзацев (в одну строку)
Такое возможно???

Foreigner 29-05-2011 10:11 1684427

vivera864864,
Взять содержимое чего? Файлов? И приведи пример как должно быть в итоге.

vivera864864 29-05-2011 10:18 1684431

Foreigner, да файлов
ну например в первой строке первого файла
C:\tmp.txt
его содержимое: exit
нужно чтобы во втором должно быть
1. exit

как-то так

и так с каждой строкой, их конечное кол-во неизвестно

Foreigner 29-05-2011 10:32 1684441

vivera864864,
Код:

@echo off
setlocal

for /f "tokens=*" %%i in (list.txt) do call:echo "%%i"
goto:eof

:echo
set /a cnt+=1

1>>result.txt (

    0>nul set /p="%cnt%. "
    type %1

)

как-то так

vivera864864 29-05-2011 10:37 1684442

Foreigner, Нумерует первую строку и всё

и надо копировать и нумеровать СОДЕРЖИМОЕ каждого файла

Foreigner 29-05-2011 10:58 1684448

vivera864864,
Цитата:

и надо копировать и нумеровать СОДЕРЖИМОЕ »
В исходных файлах из списка ( из list.txt ) по одной строке? Поставь вопрос шире. Объясни. Если в исходных файлах больше одной строки в каждом, то:
Код:

@echo off
setlocal

for /f "tokens=*" %%i in ( list.txt ) do (

    for /f "tokens=*" %%j in (' type "%%i" ') do call:echo "%%j"

)
goto:eof

:echo
set /a cnt+=1

0>nul 1>>result.txt (

    set /p="%cnt%. "
    set /p="%~1"
    echo.

)


vivera864864 29-05-2011 11:22 1684452

Foreigner, Вот это то что я искал спасибо громадное:)))))))))

Foreigner 29-05-2011 11:30 1684456

vivera864864,
Одно маленькое замечание. Этот батник не будет корректно работать если в строке присутствуют "poison symbols" ( % = ( ) ! < > )
С помощью sed этот вопрос решается:
Код:

@echo off
setlocal

for /f "tokens=*" %%i in ( list.txt ) do 1>>res.tmp findstr /v "^$" "%%i"
findstr /n "." res.tmp | 1>result.txt sed "s/^\([0-9]*\):\(.*\)$/\1. \2/g"
del res.tmp


amel27 29-05-2011 11:32 1684458

тогда до кучи:
Код:

(for /f "usebackq tokens=*" %%a in ("list.txt") do @type "%%a"
)|findstr/n $ >result.txt

Цитата:

Цитата Foreigner
С помощью sed этот вопрос решается »

батником тоже можно решить использованием DelayedExpansion

Foreigner 29-05-2011 11:40 1684464

amel27,
Цитата:

Цитата amel27
findstr/n $ >result.txt »

Здесь нумерация будет с двоеточием, а по условию было с точкой и пробелом после номера строки. И пустые строки тоже попадут в конечный файл.

amel27 29-05-2011 11:44 1684465

Foreigner, в условии задачи было сказано "как-то так"
так что вполне соответствует ))

а еще там сказано было "без абзацев (в одну строку)", это как?

vivera864864 29-05-2011 11:44 1684466

запрещенных символов нету
и надо копировать В ОДНУ строку содержимое файла
нумерация не столь важна, даже желательно с двоеточием и без пробела

amel27, в одну строку например,

первая строка
Вторая строка

а в конечном должно быть первая строка Вторая строка

Foreigner 29-05-2011 11:48 1684470

vivera864864,
Правильно поставленный вопрос -- быстрый ответ.

vivera864864 29-05-2011 11:51 1684471

Foreigner, Извините :mail1:

amel27 29-05-2011 12:14 1684478

вот вариант с решением проблемы спецсимволов,
с учетом того, как я понял файл "в одну строку": )
Код:

(for /f "tokens=1* delims=[]" %%a in ('^<list.txt find /n /v ""') do @(set/p $="%%a:"
  for /f "usebackq delims=" %%c in ("%%b") do @(set "$c=%%c"
    SETLOCAL EnableDelayedExpansion
    set/p $="!$c!"
    ENDLOCAL
  )
  echo/
))<Nul >result.txt


vivera864864 29-05-2011 12:23 1684480

amel27, Это то что нужно причём окончательно :)


Время: 11:52.

Время: 11:52.
© OSzone.net 2001-