Ru-Board.club
← Вернуться в раздел «Microsoft Windows»

» Задачи на bat-файлах 12

Автор: clio7
Дата сообщения: 02.04.2016 08:48
bifido76
полезный ресурс, но не слишком изобилует примерами. Свою задачу я решил, благодаря утилите "паскального" друга, который написал ReNamer. Низкий ему поклон.
Для себя я выбрал портативную версию.
Тема об этой программе на Rubord
Автор: YuS_two
Дата сообщения: 02.04.2016 09:06
clio7

Цитата:
Задача: удалить из имени группы файлов точки и запятые, либо заменить нижним подчеркиванием.

Как я понял, задача уже решена...
Но если вдруг понадобится в будущем, могу предложить, раз уж не принципиально именно из командной строки, воспользоваться каким-либо файловым менеджером, например, Total Commander или Far и т.п., в них есть такая возможность... Только вопрос необходимо задать в соответствующих ветках...
Автор: dstormclone
Дата сообщения: 07.04.2016 16:48
доброго времени..
хочу поинтересоваться может кто сталкивался уже..
ТЗ
нужен батник который найдет zip в текущей папке (имена каждый раз разные)
и заменит в этом архиве во множестве xmlовских файлов (имена каждый раз разные)(в кодировке русской виндовой) одни цифры на другие.

если была у кого подобная задача, поделитесь ссылкой

-----------------------------------------------
поискал нашел в интернетах такую утилиту.. достаточно с богатым функционалом.. как поиск по маске
fnr.exe
http://findandreplace.codeplex.com/#
работает шустро
-----------------------------------------------
задача сводится теперь найти архив, распаковать, выполнить утилиту, запаковать

Автор: YuS_two
Дата сообщения: 07.04.2016 19:51
dstormclone

Цитата:
задача сводится

В таком виде задача сводится к такому описанию:
пойди туда - не знаю куда, найди то - не знаю что...
Как Вы собираетесь искать файл, у которого имена разные? Можно найти группу файлов... например, по расширению или по части имени. Т.е. необходимо от чего-то отталкиваться, а после того, как найдем, уже необходимо будет выбирать упаковщик/распаковщик и далее изучать его командную строку...
В общем, в правильно заданном вопросе, должно содержаться примерно 50% ответа
Автор: dstormclone
Дата сообщения: 08.04.2016 09:10

Цитата:
В таком виде задача сводится к такому описанию:

вполне возможно что какая-то неточность в моих словах есть
есть программа выгружающая zip файл (в зависимости от региона -может быть 1607.zip или 0701.zip или другие цифры)
в связи с тем что исходная программа выгружает неправильно xml ки которые а архиве, мне нужно в xml заменить одни подстроки на другие)

Планирую создать папку (на рабочем столе), в эту папку скинуть батник и все утилиты, в эту папку закидывают неправильный zip (или сразу несколько) запускают батник.. и получают правильные zip


Цитата:
Можно найти группу файлов... например, по расширению

вот поэтому я тут недавно делал батник, ищет нахождения определенных папок и удаления

for /F "delims=" %%i in ('dir c:\ /A:D /B /S ^| find "tester\info\go"') do rmdir /s /q "%%i"

сейчас вот получается что мне нужно взять место откуда запущен скрипт найти в этой папке все zip
распаковать... запустить утилиту замены... запаковать обратно с перезаписью (или предварительно удалив исходный zip)

однако вот это конструкция не видит в текущей папке ни одного zip файла

for /F "delims=" %%i in ('dir %%~dp0 /A:D /B /S ^| find ".zip"') do echo "findfile"



Автор: nik4z
Дата сообщения: 08.04.2016 09:28
dstormclone
Несколько ошибок

Код: for /F "delims=" %%i in ('dir %~dp0 /A:-D /B /S ^| find ".zip"') do echo "findfile"
Автор: YuS_2TMP
Дата сообщения: 08.04.2016 09:39
dstormclone

Цитата:
однако вот это конструкция не видит в текущей папке ни одного zip файла

Во-о-от! Это уже более конкретно...


Код: dir %%~dp0 /A:D /B /S ^| find ".zip"
Автор: Pasha_ZZZ
Дата сообщения: 08.04.2016 09:52
dstormclone
Я вот все не понимаю: чем вам обычный FOR /R не угодил? Зачем все эти DIR'ы c FIND'ами...
Автор: YuS_2TMP
Дата сообщения: 08.04.2016 10:14
Pasha_ZZZ

Цитата:
FOR /R

dir /s
Автор: dstormclone
Дата сообщения: 08.04.2016 11:59
@echo off
setlocal enabledelayedexpansion
for /F "delims=" %%i in ('dir %~dp0*.zip /A:-D /B /S') do (
%~dp07z.exe x %%~fi && %~dp0fnr.exe --cl --dir %~dp0 --fileMask "*.xml" --excludeFileMask "*.dll, *.exe" --find "160701.11" --replace "160701.20"
)
pause

в данный момент скрипт ищет и распаковывает zip (7z.exe в этом же каталоге)
запуcкает утилиту (fnr.exe в этом же каталоге) которая ищет и правит ВСЕ xml в каталоге

теперь нужно запаковать обратно xmlки в исходный zip, и удалить соответственно

нужен вложенный цикл???
или как по правильнее сделать??

Автор: nik4z
Дата сообщения: 08.04.2016 13:18
dstormclone
Как-то так

Код: @echo off
for /F "delims=" %%i in ('dir %~dp0*.zip /A:-D /B /S') do (
2>nul rd /q /s "%temp%\$xml$"
md "%temp%\$xml$"
"%~dp07z.exe" x "%%~fi" -o"%temp%\$xml$" *.xml -r
"%~dp0fnr.exe" .......................
"%~dp07z.exe" a "%%~fi" "%temp%\$xml$\*" -y
rd /q /s "%temp%\$xml$"
)
pause
Автор: Gosuto
Дата сообщения: 08.04.2016 13:28
nik4z, уважаемые, подскажите, в батнике

Код: start /wait "" "%~dp0program/soffice.exe"
Автор: nik4z
Дата сообщения: 08.04.2016 13:37
Gosuto
Странно, /wait никак не должен влиять на запуск.
Автор: bifido 76
Дата сообщения: 08.04.2016 13:37
Gosuto

Цитата:
все верно?
Да.
Автор: Gosuto
Дата сообщения: 08.04.2016 13:41
Спасибо, господа, прояснили.
Ну, у меня ланчер будет из батника этого.
Автор: bifido 76
Дата сообщения: 08.04.2016 13:48
Gosuto
Можно немного изменить -

Код: CD /D "%~dp0program"
start /wait "" "soffice.exe"
Автор: Gosuto
Дата сообщения: 08.04.2016 13:53
bifido 76
О, спасибки, надо будет попробовать.


Добавлено:
...записал себе в памятку
Автор: dstormclone
Дата сообщения: 08.04.2016 17:01
nik4z большущее благодарю
Автор: Pasha_ZZZ
Дата сообщения: 08.04.2016 17:33
YuS_2TMP
И чем же
Цитата:
dir /s
круче
Цитата:
FOR /R

Автор: YuS_two
Дата сообщения: 08.04.2016 17:45
Pasha_ZZZ
Эмм, это не буквально, а в том смысле, что у dir есть ключи дополнительные... возможно, что, как раз, они потребовались. Мы же не телепаты... во всяком случае, я точно нет.

Добавлено:
Т.е. в некоторых случаях разница значительная.
Вот тут накидал примерчик наглядный:
Пример
Автор: vint56
Дата сообщения: 10.04.2016 08:19
Помогите пожалуйста написать батник хочу чтобы precomp обрабатывал файлы много поточно
Суть проблемы такова после распаковки фалов игры в каталог {app} каталог восстановления идет нормально но проблема с под папками Пример {app}\Data
после восстановления всех файлов в папке Data а они должны лежать в папке Data но они восстанавливаются в {app} проще говоря все файлы в кучу
dir /b *.pcf | ppx2.exe -P %NUMBER_OF_PROCESSORS% -L 1 precomp.exe -r "{}"
Автор: YuS_two
Дата сообщения: 10.04.2016 09:36
vint56

Цитата:
но проблема с под папками


Цитата:

Код: dir /b *.pcf | ppx2.exe -P %NUMBER_OF_PROCESSORS% -L 1 precomp.exe -r "{}"
Автор: Pasha_ZZZ
Дата сообщения: 11.04.2016 11:26
vint56
Тут просто DIR не обойтись, надо сформировать в комстроке еще полное имя с путем для выходного файла в ключе -o.
А чтобы его можно было узнать - надо при начальной обработке прекомпом именовать файлы, например, по маске NAME.EXT.pcf.
Вариант 2: запускать через PPX2 батник (через CMD /C), а в нем уже пространства для манервра гораздо больше (подсказка: в нем надо менять текущий каталог на тот, в котором лежит PCF-файл).
Автор: vint56
Дата сообщения: 11.04.2016 12:04
Pasha_ZZZ потому я и попросил помощи что не знаю как это сделать
Автор: fractalzZz
Дата сообщения: 11.04.2016 13:59
Всем привет. Извинясь, если не совсем по теме, так как не нашёл подходящей темы для вопроса.

Есть текстовый файл с путями и нужно проверить, что каждый файл по пути существует.
Какое самое простое решение для этого ? Может есть просто какая-то простая утилита, которая принимает на вход файл ?
Автор: Pasha_ZZZ
Дата сообщения: 11.04.2016 14:02
fractalzZz
А в каком виде надо получить результаты проверки? В принципе, FOR /F + IF EXIST, в 1 строчку
Автор: fractalzZz
Дата сообщения: 11.04.2016 14:06
В любом виде/формате, где понятно существует файл по пути или нет.
Автор: Pasha_ZZZ
Дата сообщения: 11.04.2016 14:27
fractalzZz
Можно создать файл со списком отсутствующих файлов, можно создать со списком только существующих.
Цитата:
del /f /q my_filelist.txt
for /f "tokens=*" %%a in (filelist.txt) do if NOT exist "%%a" echo.%%a>>my_filelist.txt
my_filelist.txt - вновь полученный список файлов
filelist.txt - проверяемый список

Как есть - получим список несуществующих файлов. Если убрать выделенный NOT - то существующих.
Автор: fractalzZz
Дата сообщения: 12.04.2016 18:13
Pasha_ZZZ

Я попробовал этот способ - не сработало. Пример: есть путь типа
X:\#G2006 1\__A\2006-путь\имя.pdb - эти файлы существуют, но всё равно идут в файл my_filelist.txt, а так как на обработку отправлено несколько тысяч путей, то могут быть и другие пропущенные в выходной файл, но сушествующие.

Автор: king_stiven
Дата сообщения: 17.04.2016 13:55
fractalzZz
Попробуй:
echo "%%a">>my_filelist.txt

Страницы: 123456789101112131415161718

Предыдущая тема: Не устанавливаются обои на рабочий стол (Windows 2003 x64)


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.