Компьютерный форум 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=238320)

Anufriev 10-07-2012 18:57 1949435

работа с txt файлами
 
добрый день форумчане

подскажите, пожалуйста, как из одного текстового файла, скопировать несколько названий файлов и создать текстовый файл в содержании которого будут эти названия

исходный текстовик:
читать дальше »
‚ ѓ“ Ѓ**Є* ђ®ббЁЁ Ї® Ќ®ў®бЁЎЁабЄ®© ®Ў«*бвЁ ®Ў*®ў«Ґ*л бЇа*ў®з*ЁЄЁ:
EE_AGENT.DBF ў б®бв*ўҐ ee_dat.arj
EE_BKVID.DBF ў б®бв*ўҐ ee_dat.arj
EE_SR.DBF ў б®бв*ўҐ ee_dat.arj
EE_SRTIP.DBF ў б®бв*ўҐ ee_dat.arj
EE_SRVID.DBF ў б®бв*ўҐ ee_dat.arj
EE_STAKO.DBF ў б®бв*ўҐ ee_dat.arj
HDRUS_TU.DBF ў б®бв*ўҐ hd_list.arj
HD_LIST.DBF ў б®бв*ўҐ hd_list.arj
HD_OKATO.DBF ў б®бв*ўҐ hd_list.arj
PK_SRNET.DBF ў б®бв*ўҐ ee_dat.arj
REGFAULT.dbf ў б®бв*ўҐ regfault.arj
ЋЎ*®ўЁвҐ ‚*иЁ бЇа*ў®з*ЁЄЁ Ќ‘€ ў Џ’Љ Џ‘„ Ё§ Є*в*«®Ј* public


файл на выход (название файла - get.txt):
читать дальше »
get public regfault.arj
get public ee_dat.arj
get public hd_list.arj

Anonymоus 11-07-2012 04:51 1949703

Код:

@Echo Off
SetLocal EnableDelayedExpansion
For /F "usebackq delims=" %%L In ("test.txt") Do (
        For %%A In (%%L) Do (
                Set Name=%%A
                If /I !Name:~-4!==.arj Echo get !Name!>>get.txt
        )
)


Anufriev 11-07-2012 12:13 1949840

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

1. имя файла откуда берется текст upd_nsi_*, если так и написать в место "test.txt" ни чего не происходит (* - разные цифры, формат файла отсутствует)
2. в этом батнике они пишет все имена, даже если они повторяются, мне необходимо, что бы повторные не записывались

Anonymоus 11-07-2012 12:43 1949867

Повторы убраны, перебор файлов по маске добавлен.
Код:

@Echo Off
SetLocal EnableDelayedExpansion
For /F "delims=" %%F In ('Dir "upd_nsi_*" /A-D /B') Do (
    For /F "usebackq delims=" %%L In ("%%F") Do (
        For %%A In (%%L) Do (
            Set Name=%%A
            If /I !Name:~-4!==.arj (
                Type "get.txt" 2>nul|Find "!Name!">nul||Echo get public %%A>>"get.txt"
            )
        )
    )
)
Pause&Exit


alek2012 11-07-2012 15:08 1949968

Anufriev попробуй вот этой штукой Grep

Очень полезная вещь, мне кто то на этом форуме посоветовал.

Anonymоus 11-07-2012 16:19 1950017

alek2012, grep для этой задачи - по моему мнению, излишество, хотя я и пропагандирую его использование везде, где cmd не справляется. Смотрите, скрипт с использованием grep стал короче:
Код:

@Echo Off
Set Path=%Path%;%CD%\bin
For /F "delims=" %%F In ('Dir "upd_nsi_*" /A-D /B') Do (
    For /F "delims=" %%L In ('grep -Eo "[^ ]*[.]arj" "%%F"') Do (
        Type "get.txt" 2>nul|Find "%%L">nul||Echo get public %%L>>"get.txt"
    )
)
Pause&Exit

Но при этом скрипт не запустится на любом компьютере (grep - внешняя утилита, её приходится таскать вместе со скриптом, а это около полутора мегабайт, сам exe и требуемые dll), кроме того, бывают случаи, когда использование сторонних утилит запрещено по соображениям безопасности.

Anufriev 11-11-2015 09:15 2573587

Добрый день!

появилась проблема с этим батником, сам он работает стабильно, но файлы начали приходить с именами архивов в верхнем регистре, а выводить в файл "get.txt" нужно в нижнем регистре, не подскажете, как изменить регистр?

пример входящего текста
FIL.DBF ў б®бв*ўҐ KGRD0922.ARJ
F_ARX.DBF ў б®бв*ўҐ KGRD0922.ARJ
HDRUS_TU.DBF ў б®бв*ўҐ HD_LIST.ARJ
HD_LIST.DBF ў б®бв*ўҐ HD_LIST.ARJ
HD_OKATO.DBF ў б®бв*ўҐ HD_LIST.ARJ

Foreigner 11-11-2015 11:11 2573620

Anufriev,
Код:

sed -r "s/.* (.+)$/\L\1/" 1.txt > 2.txt

Anufriev 11-11-2015 11:22 2573623

Foreigner,

Если не ошибаюсь, то это команда из линухи? в винде она не катит:)

Foreigner 11-11-2015 14:14 2573692

Цитата:

Если не ошибаюсь, то это команда из линухи? в винде она не катит
А grep катит? Он тоже из "линухи", если что.

Anufriev 11-11-2015 14:23 2573694

Foreigner, grep судя по написанному сторонняя утилитка и она не используется (запрещено использование стороннего ПО), используется батник написанный чуть выше

Foreigner 11-11-2015 15:05 2573704

Anufriev, Ну тогда через задницу, выбирай:
Код:

@echo off
setlocal

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

:1
for %%i in (%*) do set "val=%%i"

cd.>"%tmp%\%val%"

for /f "tokens=*" %%i in ('dir /b /l "%tmp%\%val%"') do 1>>2.txt echo %%i

del "%tmp%\%val%"

Код:

@echo off
setlocal

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

:1
for %%i in (%*) do set "val=%%i"

set val=%val:A=a%
set val=%val:B=b%
...
set val=%val:Z=z%

1>>2.txt echo %val%

ЗЫ. PowerShell тоже "низя"?
Код:

(get-content 1.txt).foreach({ ($_ -split '\s')[-1].tolower() }) | set-content 2.txt # для posh 4+
get-content 1.txt | foreach { ($x = $_ -split '\s')[$x.length-1].tolower() } | set-content 2.txt  # для posh 3-


Anufriev 12-11-2015 08:23 2573936

мне и через задницу пойдет:), огромное спасибо, оба батника работают прекрасно, PowerShell даже не стал проверять


Время: 09:39.

Время: 09:39.
© OSzone.net 2001-