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

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

Ответить
Настройки темы
CMD/BAT - Имя файла из его содержимого

Новый участник


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


Конфигурация

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


Есть батник копирующий файл с текстом из одной папки в другую, содержимое: copy c:\one\ps.txt c:\two\*.*
В тексте файла есть строка: P;ПП-05254543 в которой первая часть всегда статична (P;ПП-) а вторая, состоящая из цифр меняется.
Как модернизировать вышеприведенный бат файл что бы копируемому файлу присваивалось имя из числовой части строки (P;ПП-05254543), в данном случае (05254543)

Надеюсь понятно изложил. Жду совета

Отправлено: 18:03, 21-05-2014

 

Ветеран


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

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


Упакуйте несколько образцов таких файлов в архив, и приложите его к сообщению.
Это сообщение посчитали полезным следующие участники:

Отправлено: 19:22, 21-05-2014 | #2



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

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


Ветеран


Contributor


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

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


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

chcp 1251

Set "InFile=Z:\One\траляля.txt"

SetLocal EnableExtensions EnableDelayedExpansion

FOR /F "usebackq tokens=*  delims=" %%i in ("%InFile%") do (
	Set "s=%%i"
	Set "s=!s:P;ПП-=!"

	If not %%i==!s! (
		Set "s=!s: =!"
		copy "%InFile%" "z:\two\!s!.txt" 
		GoTo :Eof
	)
)
Батник должен быть написан в одной кодировке с Вашим ps.txt
Если ps.txt в DOS (866) кодировке, то строку
chcp 1251
надо удалить
Для отладки у меня ваш c:\one\ps.txt записан как Z:\One\траляля.txt
А лучше
Цитата:
Упакуйте несколько образцов таких файлов в архив, и приложите его к сообщению.

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

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

Отправлено: 20:39, 21-05-2014 | #3


Новый участник


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

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


Вложения
Тип файла: rar primer.rar
(321 байт, 4 просмотров)

Приложил два файла для примера.


megaloman,
Ваш скрипт работает. Забыл указать что в конце строки есть символ ";" он не нужен.

Отправлено: 11:02, 22-05-2014 | #4


Ветеран


Contributor


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

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


Цитата:
Забыл указать что в конце строки есть символ ";" он не нужен.
Перед строкой с Copy добавьте строку
Set "s=!s:;=!"
Пока Ваши файлы не смотрел

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


Отправлено: 13:14, 22-05-2014 | #5


Новый участник


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

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


Как сделать что бы путь к исходному файлу не жестко задавать а добавить его как параметр %1 при запуске батника ?

Попробовал так, не получилось

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


Set "InFile=%1"

SetLocal EnableExtensions EnableDelayedExpansion

FOR /F "usebackq tokens=*  delims=" %%i in ("%InFile%") do (
	Set "s=%%i"
	Set "s=!s:P;ПП-=!"

	If not %%i==!s! (
		Set "s=!s:;=!"
		copy "%InFile%" "z:\two\!s!.txt" 
		GoTo :Eof
	)
)

Последний раз редактировалось Sinus, 22-05-2014 в 16:29.


Отправлено: 16:23, 22-05-2014 | #6


Пользователь


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

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


по идее так, но у меня Ваши батники не отрабатывают даже в исходном виде, может конечно с кодировками что не то
(просто перетаскиваете файл на батник)

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

if "%~f1"=="" pause
set "InFile=%~f1"

echo %InFile%


SetLocal EnableExtensions EnableDelayedExpansion

FOR /F "usebackq tokens=*  delims=" %%i in ("%InFile%") do (
	Set "s=%%i"
	Set "s=!s:P;ПП-=!"

	If not %%i==!s! (
		Set "s=!s:;=!"
		copy "%InFile%" "z:\two\!s!.txt" 
		GoTo :Eof
	)
)

Последний раз редактировалось firstarey, 26-05-2014 в 08:10.


Отправлено: 08:00, 26-05-2014 | #7



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Копирование файла по условию его содержимого XSubZero Скриптовые языки администрирования Windows 3 16-05-2012 17:13
CMD/BAT - [решено] Поиск файла и замена в его содержимого alderv Скриптовые языки администрирования Windows 3 20-08-2011 13:11
VBS/WSH/JS - Добавить в первую строку текстового файла его имя и дату SergeyVD Скриптовые языки администрирования Windows 6 06-07-2011 20:06
CMD/BAT - [решено] Как скопировать имя файла из текстового файла в код батника и т.д. Nun-Nun Скриптовые языки администрирования Windows 6 13-05-2009 13:28
Как получить имя текущего пользователя для использования его в имени файла Denchik Автоматическая установка Windows 2000/XP/2003 1 25-01-2006 22:33




 
Переход