Показать полную графическую версию : Имя файла из его содержимого
Есть батник копирующий файл с текстом из одной папки в другую, содержимое: copy c:\one\ps.txt c:\two\*.*
В тексте файла есть строка: P;ПП-05254543 в которой первая часть всегда статична (P;ПП-) а вторая, состоящая из цифр меняется.
Как модернизировать вышеприведенный бат файл что бы копируемому файлу присваивалось имя из числовой части строки (P;ПП-05254543), в данном случае (05254543)
Надеюсь понятно изложил. Жду совета =)
Упакуйте несколько образцов таких файлов в архив, и приложите его к сообщению.
megaloman
21-05-2014, 20:39
@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
А лучше Упакуйте несколько образцов таких файлов в архив, и приложите его к сообщению.
Приложил два файла для примера.
megaloman,
Ваш скрипт работает. Забыл указать что в конце строки есть символ ";" он не нужен.
megaloman
22-05-2014, 13:14
Забыл указать что в конце строки есть символ ";" он не нужен.Перед строкой с Copy добавьте строку
Set "s=!s:;=!"
Пока Ваши файлы не смотрел
Как сделать что бы путь к исходному файлу не жестко задавать а добавить его как параметр %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
)
)
firstarey
26-05-2014, 08:00
по идее так, но у меня Ваши батники не отрабатывают даже в исходном виде, может конечно с кодировками что не то
(просто перетаскиваете файл на батник)
@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
)
)
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.