Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

И снова BAT ) Есть txt файл, текст идет в одну строчку "раз$два" и т. д. Как вместо знака $ получить перенос строки?

Вася Васечкин Мыслитель (5494), закрыт 6 лет назад
То есть нужно получить в этом файле текст в столбец
Раз
Два
Все txt файлы лежать в одной папке, но разбросаны по подпапкам.

Заранее спасибо за ответ!
Дополнен 6 лет назад
Пока что найдено решение на VBS скрипт. В принципе все работает. Но можно ли все таки на BAT это реализовать?

Пример VBS скрипта если вдруг кто столкнется с подобной задачей

Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.OpenTextFile("1.txt", 1)
setFile = f.ReadAll
f.Close
str="$"
str2=vbcrlf
setFile = Replace(setFile, str, str2)
Set f = fso.OpenTextFile("1.txt", 2)
f.Write setFile
f.Close
Set f = Nothing
Set fso = Nothing
Лучший ответ
... Гений (84839) 6 лет назад
@echo off
set folder=C:\0\0
set tmpfile="%TEMP%\%~n0-temp.txt"

for /r "%folder%" %%i in (*.txt) do (
del "%tmpfile%" /q 2>nul
for /f "usebackq delims=" %%j in ("%%i") do call :parseLine "%%j" "%tmpfile%"
move "%tmpfile%" "%%i"
)

exit

:parseLine
set str=%~1
:parseLineNext
for /f "tokens=1,* delims=$" %%i in ("%str%") do (
echo %%i>>%2
set str=%%j
)
if not "%str%"=="" goto parseLineNext
exit /b

----
P.S: В cmd заменить подстроку в строке не проблема. Н-р:
@echo off
set str=hello world, hello again
set str=%str:hello=goodbye%
echo %str%
Выведет goodbye world, goodbye again

Проблема заменить подстроку именно на символ переноса строки.
Вася ВасечкинМыслитель (5494) 6 лет назад
) И снова здравствуйте! Вы опять не спите? )) Мне кажется на этом проекте только я один про бат задаю вопросы каверзные, а вы на все решение находите и тоже причем один ) больше никого нет ))) Запустил bat, изменений нет, и он зацикливается не закрывается.
Вот что на скриншоте
... Гений (84839) Хм. я ессно проверенные только выкладываю. Странно. В любом случае надо переделать на подпапки. Ща
Вася ВасечкинМыслитель (5494) 6 лет назад
Вообще выше VBS скрипт хорошо работает, файлов будет около 30 txt, я их решил в одну папку спихнуть, но все равно путь к каждой нужно прописать. Вы кстати не знаете, может в VBS скрипте задать путь на папку как то, а не на конкретный файл?
... Гений (84839) Могу и vbs - тоже на нём пишу иногда. Но тут дело принципа теперь доделать на cmd =) Позже vbs гляну. P.S: На vbs это гораздо проще
...Гений (84839) 6 лет назад
Если в тексте кавычки:

У call большие проблемы с передачей внутренних кавычек при нескольких параметрах с кавычками %)

Решил так:

@echo off
setlocal enabledelayedexpansion

set folder=C:\0\0
set tmpfile=%TEMP%\%~n0-temp.txt

for /r "%folder%" %%i in (*.txt) do (
del "%tmpfile%" /q 2>nul
for /f "usebackq delims=" %%j in ("%%i") do call :parseLine "%%j"
move "%tmpfile%" "%%i">nul
)

exit

:parseLine
set str=%~1
:parseLineNext
for /f "tokens=1,* delims=$" %%i in ("!str!") do (
echo %%i>>"%tmpfile%"
set str=%%j
)
if not "!str!"=="" goto parseLineNext
exit /b
Вася Васечкин Мыслитель (5494) У меня беда, я похоже потерял ваш один бат, или смешал его так что не могу найти, а может его и не было.. Вообщем всю переписку прочитал на несколько раз. у себя все пересмотрел, не смог найти бат. Это по поводу удаления пустых строк в конце. Вот вы писали @echo off setlocal enabledelayedexpansion for %%i in (*.txt) do ( set /p x=<"%%i" < nul set /p=!x!>"%%i" ) Он обрезает весь текст под одну строчку, а решение чтобы обрезало только последнюю пустую не смог найти. Как помню я тестировал, а возможно там было попросту две строки и последняя обрезалась... Вы не помните решение, а может майл ру почистил комментарии что я найти не могу.
Остальные ответы
Алекс Ник Просветленный (27519) 6 лет назад
Если делаешь в С или PHP можно написать \n

если делаешь в редакторе, можно код ввести на бухгалтерской клаве. нажимаешь num look и набираешь 010 013 это тоже самое. Может у Far командер такой редактер, у волков командера такой редактор
Вася ВасечкинМыслитель (5494) 6 лет назад
Не знаком с языками программирования, нужно именно через BAT потому что его будет запускать другая программа.
Алекс Ник Просветленный (27519) Командный язык ограничен. он только для пары команд, а не для комбинаций сложных. Есть BasicScript он всё может. исполняет его CScript
Алекс Куха Высший разум (446242) 6 лет назад
set /p s= < file_out

for %%a in (%s:$= %) do echo %%a

Перебор файлов - отдельная задача
Вася ВасечкинМыслитель (5494) 6 лет назад
Непонятно что к чему, не знаю настолько командную строку, если можно выложите пример рабочий.
Алекс Куха Высший разум (446242) Это и есть рабочий пример. Перед публикацией проверил Но за вас вашу задачу делать не собираюсь Т. е. если вы "не в курсах", не моя забота
Похожие вопросы