Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] вставить две пустых строки в copy bin

Ответить
Настройки темы
CMD/BAT - [решено] вставить две пустых строки в copy bin

Старожил


Сообщения: 268
Благодарности: 8

Профиль | Отправить PM | Цитировать


Есть код
Код: Выделить весь код
chcp 1251
copy /b *.* "! merged.bin"
pause
как сделать так, чтобы между каждым файлом было по 2 пустых строки 0A 0D ? (или 0D 0A)

Код: Выделить весь код
ф1с1
ф1с2


ф2с1
ф2с2

Отправлено: 16:30, 24-02-2022

 

Старожил


Сообщения: 250
Благодарности: 51

Профиль | Отправить PM | Цитировать


перефразируете замысел!
Это сообщение посчитали полезным следующие участники:

Отправлено: 18:28, 24-02-2022 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Старожил


Сообщения: 268
Благодарности: 8

Профиль | Отправить PM | Цитировать


как сделать бинарный объединятор bin1 + 0D0A0D0A + bin2 + 0D0A0D0A + ... bin100 + 0D0A0D0A ?

есть первый файл
hex
Код: Выделить весь код
313131310D0A31310D0A3131
либо txt
Код: Выделить весь код
1111
11
11
есть второй файл
hex
Код: Выделить весь код
323232320D0A32320D0A3232
либо txt
Код: Выделить весь код
2222
22
22
после запуска скрипта должен получиться
hex
Код: Выделить весь код
323232320D0A32320D0A32320D0A0D0A313131310D0A31310D0A31310D0A0D0A
txt
Код: Выделить весь код
2222
22
22

1111
11
11

а кодом из 1го сообщения получается так
hex
Код: Выделить весь код
323232320D0A32320D0A3232313131310D0A31310D0A3131
txt
Код: Выделить весь код
2222
22
221111
11
11

Последний раз редактировалось shadowbat, 24-02-2022 в 20:57.


Отправлено: 18:56, 24-02-2022 | #3


Старожил


Сообщения: 250
Благодарности: 51

Профиль | Отправить PM | Цитировать


создайте файл file0 c содержимым 0D0A0D0A любым доступным вам способом и задача сведется к
copy /b file1 file0 file2 file0 file3 file0 .... "! merged.bin"
Это сообщение посчитали полезным следующие участники:

Отправлено: 03:09, 25-02-2022 | #4


Старожил


Сообщения: 268
Благодарности: 8

Профиль | Отправить PM | Цитировать


Вложения
Тип файла: zip bin+Line.zip
(724 байт, 5 просмотров)

Цитата Serguei Kouzmine:
copy /b file1 file0 file2 file0 file3 file0 .... "! merged.bin" »
без плюсов пишет ошибка в синтаксисе, так соединяет:
Код: Выделить весь код
chcp 1251
copy /b "11.txt.bin" + "Line.txt.bin" + "22.txt.bin" + "Line.txt.bin" + "33.txt.bin" + "Line.txt.bin" + "44.txt.bin" + "Line.txt.bin" "! merged.bin"
pause
А как это можно записать без ввода file1 file2 ? Чтобы он сам парсил имена
например типа такого: (помесь vba и cmd)
Код: Выделить весь код
Set Source=%CD%
Set Output=%CD%
Set Line=C:\0D0A.txt
for i = 1 to files.count
copy /b "%Output%\! merged.bin" + "%Line%" + "%Source%\file(i)" to "%Output%\! merged.bin" 
next i
Или что-то типа такого полностью на %CD%
Код: Выделить весь код
for i = 1 to files.count
if file(i) <> "! merged.bin" and file(i) <> "! 0D0A.bin"
copy /b "! merged.bin" + "! 0D0A.bin" + "file(i)" to "! merged.bin" 
end if
next i
Тестовые файлы прикрепил

Код: Выделить весь код
copy /b *.* "! merged.bin"
ну и не стоит забывать, что Dir имеет проблемы при составлении списка файлов
т.е. не поддерживает unicode в имени файла
хотя сейчас проверил, "●●●●.bin" клеится нормально. возможно список файлов в *.* формируется не через Dir() а через стороннюю функцию у которой нет проблем с не-православными именами файлов

Последний раз редактировалось shadowbat, 25-02-2022 в 08:20.


Отправлено: 06:14, 25-02-2022 | #5


Ветеран


Contributor


Сообщения: 2733
Благодарности: 1698

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
@Echo Off
cls
>nul Chcp 1251
	Set "BoxIn=Z:\Box_In"
	Set "Mask=bin*.bin"

	Set "FileOut=Z:\Box_Out\! merged.bin"

	If Not Exist "%BoxIn%\%Mask%" (Echo Files "%BoxIn%\%Mask%" not found &Pause &Exit /B)

	FOR /F "usebackq delims=" %%f In (`2^>nul Where "%BoxIn%:%Mask%"`) DO >nul Copy /b "%%f" "%FileOut%" &GoTo :Begin
	:Begin
	FOR /F "usebackq Skip=1 delims=" %%f In (`2^>nul Where "%BoxIn%:%Mask%"`) DO (
		(>>"%FileOut%" Echo.)		
		(>>"%FileOut%" Echo.)		
		>nul Copy /b "%FileOut%"+"%%f" "%FileOut%"
	)
Pause
Exit /B

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.

Это сообщение посчитали полезным следующие участники:

Отправлено: 15:58, 25-02-2022 | #6


Старожил


Сообщения: 268
Благодарности: 8

Профиль | Отправить PM | Цитировать


Цитата megaloman:
Echo »
Прекрасно работает
А как добавить исключение для добавления самого кода bat файла в результат? (копирую его в папку и запускаю из %CD%)
Ниже код с ошибкой:

Код: Выделить весь код
@Echo Off
cls
>nul Chcp 1251
	Set "BoxIn=%CD%"
	Set "Mask=*.*"

	Set "FileOut=%CD%\! merged.bin"

	If Not Exist "%BoxIn%\%Mask%" (Echo Files "%BoxIn%\%Mask%" not found &Pause &Exit /B)

	FOR /F "usebackq delims=" %%f In (`2^>nul Where "%BoxIn%:%Mask%"`) DO (IF "%%f" neq "binbin.bat"(>nul Copy /b "%%f" "%FileOut%" &GoTo :Begin))
	:Begin
	FOR /F "usebackq Skip=1 delims=" %%f In (`2^>nul Where "%BoxIn%:%Mask%"`) DO (IF "%%f" neq "binbin.bat" (
		(>>"%FileOut%" Echo.)		
		(>>"%FileOut%" Echo.)		
		(Echo ------>>"%FileOut%")		
		(>>"%FileOut%" Echo.)		
		>nul Copy /b "%FileOut%"+"%%f" "%FileOut%"
	))
Pause
Exit /B

Отправлено: 16:21, 25-02-2022 | #7


Ветеран


Contributor


Сообщения: 2733
Благодарности: 1698

Профиль | Отправить PM | Цитировать


Цитата shadowbat:
А как добавить исключение для добавления самого кода bat файла в результат? »
Я не понял, что Вы хотите.
Допустим, сейчас результат кода ! merged.bin. Что в этом Вас не устраивает?
Код: Выделить весь код
111
1111
11


222
2222
22


333
3333
33

Если маской файла не удаётся отсечь батник и суммарный файл, то вот вариант с добавкой исключения из процесса батника и ! merged.bin
Код: Выделить весь код
@Echo Off
cls
>nul Chcp 1251
 	Set "BoxIn=%~dp0"
rem	Set "BoxIn=Z:\Box_In"
	Set "Mask=bin*.bin"

	If "%BoxIn:~-1%"=="\" Set "BoxIn=%BoxIn:~0,-1%" 

rem	Set "FileOut=Z:\Box_Out\! merged.bin"
	Set "FileOut=%BoxIn%\! merged.bin"

	If Not Exist "%BoxIn%\%Mask%" (Echo Files "%BoxIn%\%Mask%" not found &Pause &Exit /B)

	FOR /F "usebackq delims=" %%f In (`2^>nul Where "%BoxIn%:%Mask%" ^|Find /I /V "%FileOut%" ^|Find /I /V "%~dpnx0"`) DO >nul Copy /b "%%f" "%FileOut%" &GoTo :Begin
	:Begin
	FOR /F "usebackq Skip=1 delims=" %%f In (`2^>nul Where "%BoxIn%:%Mask%" ^|Find /I /V "%FileOut%" ^|Find /I /V "%~dpnx0"`) DO (
		(>>"%FileOut%" Echo.)		
		(>>"%FileOut%" Echo.)		
		>nul Copy /b "%FileOut%"+"%%f" "%FileOut%"
	)
Pause
Exit /B
Лучше не копировать батник в обрабатываемую папку.
Создайте его в каком-либо месте и на рабочем столе создайте только ярлык на него.
В проводнике выбирайте нужную для обработки папку и мышкой затаскивайте его на этот ярлык.
Вариант для такой работы.
Код: Выделить весь код
@Echo Off
cls
>nul Chcp 1251
	If "%1"=="" (Echo Bat File "%~dpnx0" mast run with argument: folder path. Press any key. &>nul Pause &Exit /B)
 
 	Set "BoxIn=%1"
	Set "Mask=bin*.bin"
rem	Set "Mask=*.*"

	If "%BoxIn:~-1%"=="\" Set "BoxIn=%BoxIn:~0,-1%" 

	Set "FileOut=%BoxIn%\! merged.bin"

	If Not Exist "%BoxIn%\%Mask%" (Echo Files "%BoxIn%\%Mask%" not found &Pause &Exit /B)

	FOR /F "usebackq delims=" %%f In (`2^>nul Where "%BoxIn%:%Mask%" ^|Find /I /V "%FileOut%" ^|Find /I /V "%~nx0"`) DO >nul Copy /b "%%f" "%FileOut%" &GoTo :Begin
	:Begin
	FOR /F "usebackq Skip=1 delims=" %%f In (`2^>nul Where "%BoxIn%:%Mask%" ^|Find /I /V "%FileOut%" ^|Find /I /V "%~nx0"`) DO (
		(>>"%FileOut%" Echo.)		
		(>>"%FileOut%" Echo.)		
		>nul Copy /b "%FileOut%"+"%%f" "%FileOut%"
	)
Echo Press any key. &>nul Pause
Exit /B

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 27-02-2022 в 17:59.

Это сообщение посчитали полезным следующие участники:

Отправлено: 17:22, 25-02-2022 | #8


Старожил


Сообщения: 268
Благодарности: 8

Профиль | Отправить PM | Цитировать


Цитата megaloman:
Я не понял, что Вы хотите.
Допустим, сейчас результат кода ! merged.bin. Что в этом Вас не устраивает?»
Я всегда копирую батник в папку, с которой нужно работать
Это быстрее, чем прописывать вручную пути каждый раз.
В первом коде он естественно добавлял код этого батника в результат, что в принципе не критично.
Что хочу - скопировать батник в папку, получить сумму всех бинарников, кроме этого батника

Цитата megaloman:
вот вариант с добавкой исключения из процесса батника и ! merged.bin»
Второй вариант прекрасен, как раз то, что нужно.
Чуть изменил - с выводом имени файла + лог в консольку
Код: Выделить весь код
@Echo Off
cls
>nul Chcp 1251
 	Set "BoxIn=%~dp0"
rem	Set "BoxIn=Z:\Box_In"
	Set "Mask=*.*"
	If "%BoxIn:~-1%"=="\" Set "BoxIn=%BoxIn:~0,-1%" 
rem	Set "FileOut=Z:\Box_Out\! merged.bin"
	Set "FileOut=%BoxIn%\! merged.bin"
	If Not Exist "%BoxIn%\%Mask%" (Echo Files "%BoxIn%\%Mask%" not found &Pause &Exit /B)
	FOR /F "usebackq delims=" %%f In (`2^>nul Where "%BoxIn%:%Mask%" ^|Find /I /V "%FileOut%" ^|Find /I /V "%~dpnx0"`) DO (
		Echo %%~nxf
		Echo ---%%~nxf--->>"%FileOut%"
		>>"%FileOut%" Echo.
		>nul Copy /b "%FileOut%"+"%%f" "%FileOut%" &GoTo :Begin
	)
	:Begin
	FOR /F "usebackq Skip=1 delims=" %%f In (`2^>nul Where "%BoxIn%:%Mask%" ^|Find /I /V "%FileOut%" ^|Find /I /V "%~dpnx0"`) DO (
		Echo %%~nxf
		>>"%FileOut%" Echo.
		>>"%FileOut%" Echo.
		Echo ---%%~nxf--->>"%FileOut%"
		>>"%FileOut%" Echo.
		>nul Copy /b "%FileOut%"+"%%f" "%FileOut%"
	)
Pause
Exit /B

Результат

Код: Выделить весь код
---11.txt.bin---

1111
11
11

---22.txt.bin---

2222
22
22

---33.txt.bin---

3333
33
33

---44.txt.bin---

4444
44
44

Последний раз редактировалось shadowbat, 25-02-2022 в 18:56.


Отправлено: 18:13, 25-02-2022 | #9


Ветеран


Contributor


Сообщения: 2733
Благодарности: 1698

Профиль | Отправить PM | Цитировать


В Вашем коде в первом случае в Copy "%%f" замените на "%FileOut%"+"%%f"

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.

Это сообщение посчитали полезным следующие участники:

Отправлено: 18:43, 25-02-2022 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] вставить две пустых строки в copy bin

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Любой язык - найти письмо с фамилией/именем в теле письма, copy строки в .docx шаблон и save v79italya Скриптовые языки администрирования Windows 9 03-09-2019 06:13
2013 - [решено] Как вставить разрыв страницы (или 10 пустых строк) в самый низ документа? megagogo Microsoft Office (Word, Excel, Outlook и т.д.) 4 25-02-2015 13:32
CMD/BAT - Как вставить пробелы в строки vision-d Скриптовые языки администрирования Windows 17 21-03-2014 14:48
CMD/BAT - [решено] Вставить после каждой 10 строки пустую строку Mycry Скриптовые языки администрирования Windows 8 31-07-2013 00:05
VBS/WSH/JS - [решено] Вставить строки в конце файла WORD AlexVong Скриптовые языки администрирования Windows 1 27-07-2012 00:33




 
Переход