Показать полную графическую версию : Удаление всех пробельных символов в текстовых файлах.
Нужно удалить все пробелы + возможный перевод каретки и в некоторых случаях переносы строк(так как, кое-где это тоже самое).
Есть большое количество текстовых файлов с пробелами в папке.
Нужно удалить все пробелы и т.д. из содержимого.
т.е.
пробел текст пробел текст пробел
пробел текст пробел текст пробел
пробел текст пробел текст пробел
пробел текст пробел текст пробел
пробел
надо:
текст
текст
текст
текст
здесь строка не пустая,её просто нет,точнее не должно быть.
Есть код:
setlocal EnableDelayedExpansion
set folder=,\fld\
for %%i in (%folder%*) do call :del_blanks %folder% %%i
exit /b
:del_blanks
ren %1%2 file.tmp
for /f "tokens=*" %%i in (%1file.tmp) do @set ss=%%i & echo! ss: =!>> %1%2
del %1file.tmp
exit /b
но где-то в нём ошибка..??
но где-то в нём ошибка..?? »
Одна большая ошибка — в использовании пакетного файла.
Пользуйте WSH/PoSH.
DJ Mogarych
21-10-2020, 22:32
Нужно удалить все пробелы »
Откуда? Из имён файлов или из их содержимого?
Из имён можно так (powershell):
dir "C:\temp\folder\*.txt" |% {ren $_.FullName -NewName $($_.Name -replace "\s+")}
Из содержимого - так:
dir "C:\temp\folder\*.txt" |% {(gc $_) -replace "\s+" |sc $_}
К сожалению ни один из вариантов ,не удаляет пробел (переход на следующую строку).
Foreigner
22-10-2020, 12:56
не удаляет пробел (переход на следующую строку). »
Все содержимое в каждом файле надо без пробелов в одну строку?
foreach ($file in (Get-Childitem "C:\Folder\*.txt"))
{
-join (Get-Content $file).Split() | Set-Content $file
}
foreach ($file in (Get-Childitem "C:\Folder\*.txt"))
{
-join (Get-Content $file).Split() | Set-Content $file
} »
пробел текст пробел
пробел текст пробел
пробел текст пробел
пробел
надо:
текст
текст
текст
Foreigner
22-10-2020, 13:27
надо: »
Уберите оператор -join
foreach ($file in (Get-Childitem "C:\Folder\*.txt"))
{
(Get-Content $file).Split().Where{ $_ } | Set-Content $file
}
Уберите оператор -join
Код:
foreach ($file in (Get-Childitem "C:\Folder\*.txt"))
{
(Get-Content $file).Split().Where{ $_ } | Set-Content $file
} »
не меняется.только в некоторых файлах в начале пробелы появляются.
Foreigner
22-10-2020, 14:13
не меняется.только в некоторых файлах в начале пробелы появляются. »
Извиняюсь, неправильно понял:
foreach ($file in (Get-Childitem "C:\Folder\*.txt"))
{
(Get-Content $file).Trim().Split().Where{ $_ } | Set-Content $file
}
foreach ($file in (Get-Childitem "C:\Folder\*.txt"))
{
(Get-Content $file).Trim().Split().Where{ $_ } | Set-Content $file
} »
остаётся пробел перехода.в некоторых строках нарушается последовательность.
Uragan66
22-10-2020, 14:46
остаётся пробел перехода.в некоторых строках нарушается последовательность. »
Foreach ($file in (Get-Childitem "C:\Folder\*.txt"))
{
(Get-Content $file).Trim() | where {$_ -ne ""} | Set-Content $file
}
Код:
Foreach ($file in (Get-Childitem "C:\Folder\*.txt"))
{
(Get-Content $file).Trim() | where {$_ -ne ""} | Set-Content $file
} »
тоже самое.
megaloman
22-10-2020, 15:40
@Echo Off
Set "Folder=Z:\Box_In"
Set "Mask=*.*"
FOR %%f IN ("%Folder%\%Mask%") DO (
>"%%f.tmp" (FOR /F "usebackq delims=" %%s IN (`More "%%f"`) DO (
Set "SS=%%s"
(Call :MyOut "%%SS: =%%")
))
>nul Move /Y "%%f.tmp" "%%f"
)
Exit /B
:MyOut
(If Not %1=="" Echo %~1)
Exit /B
Код:
@Echo Off
Set "Folder=Z:\Box_In"
Set "Mask=*.*"
FOR %%f IN ("%Folder%\%Mask%") DO (
>"%%f.tmp" (FOR /F "usebackq delims=" %%s IN (`More "%%f"`) DO (
Set "SS=%%s"
(Call :MyOut "%%SS: =%%")
))
>nul Move /Y "%%f.tmp" "%%f"
)
Exit /B
:MyOut
(If Not %1=="" Echo %~1)
Exit /B »
остаётся так же пробел (переход на новую строку).
Foreigner
22-10-2020, 15:55
остаётся пробел перехода.в некоторых строках нарушается последовательность.»
Приложите файл. У меня все отрабатывает. Или вы имеете ввиду самый последний перевод строки?
foreach ($file in (Get-Childitem "C:\Folder\*.txt"))
{
((Get-Content $file).Trim().Split().Where{$_} | Out-String).Trim() | Set-Content $file -NoNewline
}
Приложите файл. У меня все отрабатывает. Или вы имеете ввиду самый последний перевод строки? »
да.самый последний,переход на новую пустую строку.
DJ Mogarych
22-10-2020, 16:50
пробел (переход на следующую строку) »
Это разные вещи.
Это разные вещи. »
возможно.хотя не все считают это не единым понятием,в т.ч. разработчики определённого сотфа.
DJ Mogarych
22-10-2020, 20:57
serg515, дело не в том, как кто считает, а в постановке задачи, когда сначала непонятно, откуда убирать пробелы, а потом оказывается, что пробелами именуются и переводы строки.
dir "C:\temp\folder\*.txt" |% {(gc $_ -raw) -replace "\s+|`n" |sc $_}
DJ Mogarych,
просто некоторые и переводы строки относят к пробелам.
шапку дополнил.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.