Показать полную графическую версию : [решено] удалить все пустые строки, кроме самой последней
Alexander_88
05-01-2015, 00:44
здравствуйте, есть код, он заменяет текст с одного на другой
@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
но к сожалению, добавляет пустые строки, можно ли удалить все пустые строки из нескольких заданных тхт файлов, а последнюю пустую строку оставить?
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
заменил, но в конце документа, появляется пустая строка, изначально она одна, после применения батника их становится две
Первый раз из-за последней (лишней) пустой строки приходится писать новый код:):
@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
ааа, надо было протестировать сначало(( решил сразу на документе провернуть операцию, блокнот просто стал пустым и все , удалилось все ))
а есть код, для удаления всех пустых строк, кроме последней, я бы просто отдельным батником запускал и все, только чтобы можно было несколько файлов вписать в обработку
ааа, надо было протестировать сначало(( решил сразу на документе провернуть операцию, блокнот просто стал пустым и все , удалилось все )) »
Очевидно, меняли одну строку с пробелами на другую строку с пробелами? Пробелы, символы табуляции и кавычки -- "ложка дёгтя в бочку с мёдом" при использовании конструкций с "mshta" и "vbscript".
а есть код, для удаления всех пустых строк, кроме последней »
Есть такой код -- перезапись через "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
также, очистил весь блокнот..
Есть такой код -- перезапись через "for", только он удалит абсолютно все пустые строки, кроме последней, включая пустые строки между другими строками
А мне как раз это подойдет, у меня список ссылок, каждая с новой строки (пустых строк в середине нету), и только 1 строка пустая в конце, потом я применяю первый на примере код, для замены текста, он все делает, но после него образуется в конце еще пустая(ые) строки, нужно их убрать, т.е. оставить только одну пустую, которая была изначально
А мне как раз это подойдет, у меня список ссылок, каждая с новой строки (пустых строк в середине нету), и только 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
спасибо Georgio, работает :)
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.