Имя пользователя:
Пароль:
 

Показать сообщение отдельно

Старожил


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

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


А зачем, собственно, использовать один батник для генерации другого, если всё можно сделать в одном?

Код: Выделить весь код
@Echo Off
SetLocal EnableDelayedExpansion

rem Разбираем исходный файл построчно
For /F "usebackq delims=" %%L In ("test.txt") Do (
	Set Text=%%L
	rem Выделяем последний сегмент строки
	For %%A In (%%L) Do (Set LastWord=%%A)
	rem Костыль с for из-за невозможности замены с двумя !переменными!
	For /F "delims=" %%S In ("!LastWord!") Do (
		rem Убираем последний сегмент
		Set Text=!Text:%%S=!
		rem И откусываем последние два символа - точку с запятой и
		rem разделитель-пробел
		Set Text=!Text:~,-2!
	)
	rem Пишем строку в файл, имя которого берется из последнего сегмента её же
	Echo !Text!>"C:\spisok\!LastWord!.txt"
)
Pause
На приведенном вами примере
Цитата mxm199:
текст текст текст 1111111111;
текст2 текст2 текст2 2222222222; »
работает. Как на реальных данных будет - зависит от них, я бы предпочел увидеть именно их. Из возможных узких мест:
* Длина строки не должна выходить за пределы максимальной длины переменной у командного интерпретатора windows
* Восклицательные знаки из текста будут убраны из-за EnableDelayedExpansion
* Имя конечного файла должно быть без пробелов, иначе один из циклов For воспримет его, как разделитель. Или, если пробелы нужны - заключено в двойные кавычки.

Последний раз редактировалось Anonymоus, 04-07-2012 в 11:23.

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

Отправлено: 10:53, 04-07-2012 | #4