Войти

Показать полную графическую версию : Имя файла из его содержимого


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

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

Iska
21-05-2014, 19:22
Упакуйте несколько образцов таких файлов в архив, и приложите его к сообщению.

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
А лучше Упакуйте несколько образцов таких файлов в архив, и приложите его к сообщению.

Sinus
22-05-2014, 11:02
Приложил два файла для примера.


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

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

Sinus
22-05-2014, 16:23
Как сделать что бы путь к исходному файлу не жестко задавать а добавить его как параметр %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