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

Alexander_88 05-01-2015 00:44 2452050

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

Код:

@echo off

set "word_or_frase=text1"
set "replacement=text2"

for %%i in (
"C:\work\fileslink.txt"
"C:\work2\fileslink.txt"
"C:\work3\fileslink.txt"
 ) do (
 echo WScript.Echo^(Replace^(WScript.CreateObject^("Scripting.FileSystemObject"^).OpenTextFile^(%%i^).ReadAll^(^),"%word_or_frase%","%replacement%"^)^)>.vbs
 cscript //nologo .vbs| clip
 mshta "vbscript:CreateObject("Scripting.FileSystemObject").GetStandardStream(1).Write(ClipboardData.GetData("text"))&Close()"| more>%%i
 )
del .vbs

но к сожалению, добавляет пустые строки, можно ли удалить все пустые строки из нескольких заданных тхт файлов, а последнюю пустую строку оставить?

Georgio 05-01-2015 01:18 2452063

Alexander_88, замените в коде строку
Код:

mshta "vbscript:CreateObject("Scripting.FileSystemObject").GetStandardStream(1).Write(ClipboardData.GetData("text"))&Close()"| more>%%i
на строку
Код:

mshta "vbscript:CreateObject("Scripting.FileSystemObject").GetStandardStream(1).Write(ClipboardData.GetData("text"))&Close()">%%i
.

Alexander_88 05-01-2015 01:28 2452065

заменил, но в конце документа, появляется пустая строка, изначально она одна, после применения батника их становится две

Georgio 05-01-2015 01:51 2452069

Первый раз из-за последней (лишней) пустой строки приходится писать новый код:):


Код:

@echo off

set "word_or_frase=text1"
set "replacement=text2"

for %%i in (
"C:\work\fileslink.txt"
"C:\work2\fileslink.txt"
"C:\work3\fileslink.txt"
 ) do (
 mshta "vbscript:CreateObject("Scripting.FileSystemObject").GetStandardStream(1).Write(Replace(CreateObject("Scripting.FileSystemObject").OpenTextFile(%%i).ReadAll(),"%word_or_frase%","%replacement%"))&Close()">.tmp
 type .tmp>%%i
 )

del.tmp& exit /b


.

Alexander_88 05-01-2015 10:10 2452116

ааа, надо было протестировать сначало(( решил сразу на документе провернуть операцию, блокнот просто стал пустым и все , удалилось все ))

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

Georgio 05-01-2015 11:18 2452125

Цитата:

Цитата Alexander_88
ааа, надо было протестировать сначало(( решил сразу на документе провернуть операцию, блокнот просто стал пустым и все , удалилось все )) »


Очевидно, меняли одну строку с пробелами на другую строку с пробелами? Пробелы, символы табуляции и кавычки -- "ложка дёгтя в бочку с мёдом" при использовании конструкций с "mshta" и "vbscript".



Цитата:

Цитата Alexander_88
а есть код, для удаления всех пустых строк, кроме последней »


Есть такой код -- перезапись через "for", только он удалит абсолютно все пустые строки, кроме последней, включая пустые строки между другими строками. Поэтому, по-моему, лучше не допустить их появление, чем потом удалять.



Попробуйте ещё так:


Код:

@echo off

set "word_or_frase=text 1"
set "replacement=text 2"

for %%i in (
"C:\work\fileslink.txt"
"C:\work2\fileslink.txt"
"C:\work3\fileslink.txt"
 ) do (
 mshta "vbscript:CreateObject("Scripting.FileSystemObject").GetStandardStream(1).Write(Replace(CreateObject("Scripting.FileSystemObject").OpenTextFile(%%i).ReadAll(),"%word_or_frase: ="+Chr(32)+"%","%replacement: ="+Chr(32)+"%"))&Close()">.tmp
 type .tmp>%%i
 )

del .tmp& exit /b


.

Alexander_88 05-01-2015 11:32 2452128

также, очистил весь блокнот..

Код:

Есть такой код -- перезапись через "for", только он удалит абсолютно все пустые строки, кроме последней, включая пустые строки между другими строками
А мне как раз это подойдет, у меня список ссылок, каждая с новой строки (пустых строк в середине нету), и только 1 строка пустая в конце, потом я применяю первый на примере код, для замены текста, он все делает, но после него образуется в конце еще пустая(ые) строки, нужно их убрать, т.е. оставить только одну пустую, которая была изначально

Georgio 05-01-2015 12:04 2452139

Цитата:

Цитата Alexander_88
А мне как раз это подойдет, у меня список ссылок, каждая с новой строки (пустых строк в середине нету), и только 1 строка пустая в конце, потом я применяю первый на примере код, для замены текста, он все делает, но после него образуется в конце еще пустая(ые) строки, нужно их убрать, т.е. оставить только одну пустую, которая была изначально »


Код:

@echo off

for %%i in (
"C:\work\fileslink.txt"
"C:\work2\fileslink.txt"
"C:\work3\fileslink.txt"
 ) do (
 for /f "usebackq delims=" %%j in (%%i) do (
  echo.%%j>>.tmp
  )
 type .tmp>%%i& type nul>.tmp
 )

del .tmp& exit /b


Alexander_88 05-01-2015 12:43 2452155

спасибо Georgio, работает :)


Время: 11:24.

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