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

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

temphard 08-12-2019 02:17 2899449

Как объединить два скрипта в один?
 
Здравствуйте. Я использую последовательно два скрипта.

Первый, в котором удаляются все строки, кроме тех, где содержится "slovo"
Код:

@echo off
set fname=file1.txt
findstr /c:"slovo" %fname% >log.tmp
del %fname%
move log.tmp %fname%

Второй, который удаляет первые 6 символов в каждой строке
Код:

@echo off
SetLocal enabledelayedexpansion
set File=file1.txt
set nn=6
set Out=file2.txt
For /F "usebackq delims=" %%A In ("%File%") Do (
    Set "String=%%A"& Set "String=!String:~%nn%!"
    Echo.!String!>>%out%
    )
exit /b

Можно ли эти скрипты объединить в один, чтобы не запускать два батника. А также чтобы в конечном результате file2.txt перезаписывался, а не дописывался.

DJ Mogarych 08-12-2019 09:35 2899459

Код:

powershell -command "((gc C:\temp\1.txt) -match 'slovo').Substring(6) > C:\temp\2.txt"

YuS_2 08-12-2019 09:55 2899461

Цитата:

Цитата temphard
Можно ли эти скрипты объединить в один, чтобы не запускать два батника. А также чтобы в конечном результате file2.txt перезаписывался, а не дописывался. »

powershell
Код:

$file = 'file1.txt'
$arr = gc $file -enc OEM
$arr|?{$_ -notmatch 'slovo'}|%{$_ -replace '^.{6}'}|out-file $file -enc OEM


megaloman 08-12-2019 10:27 2899465

Первый файл останется неизменным
Код:

@Echo Off
        Set "FileIn=Z:\Box_In\1.txt"
        Set "FileOut=Z:\Box_Out\2.txt"
        Set "Word=sLoVo"
        Set /A N=6

        >"%FileOut%" (For /F "usebackq delims=" %%s In (`2^>nul FINDSTR /I /C:"%Word%" "%FileIn%"`) Do (
                Set "String=%%s"
                (Call Echo %%String:~%N%%%)
        ))
Exit /B 0


Первый файл будет содержать только выбранные строки, как в Ваших предыдущих скриптах
Код:

@Echo Off
        Set "FileIn=Z:\Box_In\1.txt"
        Set "FileOut=Z:\Box_Out\2.txt"
        Set "Word=sLoVo"
        Set /A N=6

        2>nul Del "%FileIn%.tmp"
        >"%FileOut%" (For /F "usebackq delims=" %%s In (`2^>nul FINDSTR /I /C:"%Word%" "%FileIn%"`) Do (
                Set "String=%%s"
                >>"%FileIn%.tmp" (Echo %%s)
                (Call Echo %%String:~%N%%%)
        ))
        >nul Move /Y "%FileIn%.tmp" "%FileIn%"
Exit /B 0

Выделены отличия первого скрипта от второго

temphard 09-12-2019 10:13 2899612

Цитата:

Цитата megaloman
Первый файл останется неизменным »

Цитата:

Цитата megaloman
Первый файл будет содержать только выбранные строки, как в Ваших предыдущих скриптах »

Шикарно! Спасибо.
P.S. За powershell я тоже благодарен, но в данном случае мне именно батник нужен.

DJ Mogarych 09-12-2019 11:17 2899621

temphard, код, который я привёл - это для батника.


Время: 04:57.

Время: 04:57.
© OSzone.net 2001-