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

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

Автор: lorents
Дата сообщения: 19.06.2016 14:55
YuS_two

Цитата:
Чисто из любопытства: что с ними можно делать без привязки к самим файлам? И размеры от всех файлов требуется в таблицу помещать?

Я занимаюсь оптимизаций изображений, и для каждой папки с файлами использую определенные параметры оптимизации. После того как я получу результаты, я смогу комбинировать параметры оптимизации, и могу понять, какие параметры дают лучший результат, а какие худший.
Автор: YuS_two
Дата сообщения: 19.06.2016 15:27
lorents

Цитата:
для каждой папки с файлами использую определенные параметры оптимизации.

Ну вот же! Всё таки привязка нужна... и нужна она относительно папок, если я правильно понял. Иначе каким образом из таблицы будет понятно откуда (из какой папки) получены цифры?

Но вопросы остались без ответа... по поводу:
1. Все ли файлы требуется обрабатывать по размеру?
2. Как выглядит окончательная таблица? А именно: что будет в строках, а что в столбцах?
3. Так и не расшифровано: что такое одинаковые файлы? Одинаковое имя и разные расширения, или в чем одинаковость?
Автор: Ciber SLasH
Дата сообщения: 19.06.2016 17:13
YuS_two

Цитата:
1. Пробелы в именах не учтены

Поправил (tokens=1,*).

Цитата:
2. Размер с одинаковыми именами файлов, без абсолютного/относительного пути, трудно будет использовать в дальнейшем...

Это можно легко поправить. ТС неправильно ставить постановку задачи.

lorents

Цитата:
Мне по сути надо сделать таблицу с размерами файлов, чтобы в одной строке было указано 207 значений.

Тогда так:

Код: @echo off
REM FileSize to CSV
if "%~1"=="" (
    echo Usage: %~nx0 ^<folderFullPath^> [^<CSV-fullPath^>]
    pause & goto :EOF
)
if not exist "%~1" (
    echo "%~1" not exist!
    pause & goto :EOF
)
setlocal EnableDelayEdExpansion
set "folder=%~dp1"
set "fileCSV=%~2"
set "fileCSV_def=%~dp0%~n0.csv"
if not exist "%~dp2" (
    set "fileCSV=%fileCSV_def%"
)
set "fs="
for /r "%folder%" %%A in (*) do (
    set "fs=!fs!;%%~zA"
)
set "fs=%fs:~1%"
1>"%fileCSV%" echo %fs%
endlocal
Автор: YuS_two
Дата сообщения: 19.06.2016 19:37
Ciber SLasH

Цитата:
Это можно легко поправить. ТС неправильно ставить постановку задачи.

Да, это так. И наводящими вопросами не выудишь информацию...

Цитата:
Тогда так:

Это не всё, что требуется, если доверять моему чувству телепатирования... вот, тут есть дополнение:

Цитата:
там лежат - 206 папок (скорректировал). В каждой папке лежат 8185 файлов с одинаковыми названиями, но с разными размерами. Вот мне надо построить таблицу с размерами этих файлов.

Думаю, что требуется 206 столбцов (по одному на папку) и 8185 строк (по строке на файл)...

Вот тут на PS накидал сценарий, который для каждой папки будет создавать свой .csv:

Код: $pth='c:\TEST'
$fp='b','u','d','l','r','f','ud','ul','ur','uf','du','dl','dr','df','lu','ld','lr','lf','ru','rd','rl','rf','fu','fd','fl','fr','udl','udr','udf','uld','ulr','ulf','urd','url','urf','ufd','ufl','ufr','dul','dur','duf','dlu','dlr','dlf','dru','drl','drf','dfu','dfl','dfr','lud','lur','luf','ldu','ldr','ldf','lru','lrd','lrf','lfu','lfd','lfr','rud','rul','ruf','rdu','rdl','rdf','rlu','rld','rlf','rfu','rfd','rfl','fud','ful','fur','fdu','fdl','fdr','flu','fld','flr','fru','frd','frl','udlr','udlf','udrl','udrf','udfl','udfr','uldr','uldf','ulrd','ulrf','ulfd','ulfr','urdl','urdf','urld','urlf','urfd','urfl','ufdl','ufdr','ufld','uflr','ufrd','ufrl','dulr','dulf','durl','durf','dufl','dufr','dlur','dluf','dlru','dlrf','dlfu','dlfr','drul','druf','drlu','drlf','drfu','drfl','dful','dfur','dflu','dflr','dfru','dfrl','ludr','ludf','lurd','lurf','lufd','lufr','ldur','lduf','ldru','ldrf','ldfu','ldfr','lrud','lruf','lrdu','lrdf','lrfu','lrfd','lfud','lfur','lfdu','lfdr','lfru','lfrd','rudl','rudf','ruld','rulf','rufd','rufl','rdul','rduf','rdlu','rdlf','rdfu','rdfl','rlud','rluf','rldu','rldf','rlfu','rlfd','rfud','rful','rfdu','rfdl','rflu','rfld','fudl','fudr','fuld','fulr','furd','furl','fdul','fdur','fdlu','fdlr','fdru','fdrl','flud','flur','fldu','fldr','flru','flrd','frud','frul','frdu','frdl','frlu','frld'
$files= dir -recurse $pth\*|select len*,fulln*
foreach ($fd in $fp){if(test-path $fd\*.*){$files|where{$_.FullName -match '\\'+$fd+'\\'}|export-csv $fd'.csv' -encoding UTF8}}
Автор: lorents
Дата сообщения: 19.06.2016 20:59
YuS_two

Цитата:
1. Все ли файлы требуется обрабатывать по размеру?

да все файлы

Цитата:
2. Как выглядит окончательная таблица? А именно: что будет в строках, а что в столбцах?

строки отображают информацию о файле, столбец - размер этого файла.

Цитата:
3. Так и не расшифровано: что такое одинаковые файлы? Одинаковое имя и разные расширения, или в чем одинаковость?

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

У меня как раз проблема склеить полученные столбцы в таблицу.

Код: for %%j in (b,u,d,l,r,f,ud,ul,ur,uf,du,dl,dr,df,lu,ld,lr,lf,ru,rd,rl,rf,fu,fd,fl,fr,udl,udr,udf,uld,ulr,ulf,urd,url,urf,ufd,ufl,ufr,dul,dur,duf,dlu,dlr,dlf,dru,drl,drf,dfu,dfl,dfr,lud,lur,luf,ldu,ldr,ldf,lru,lrd,lrf,lfu,lfd,lfr,rud,rul,ruf,rdu,rdl,rdf,rlu,rld,rlf,rfu,rfd,rfl,fud,ful,fur,fdu,fdl,fdr,flu,fld,flr,fru,frd,frl,udlr,udlf,udrl,udrf,udfl,udfr,uldr,uldf,ulrd,ulrf,ulfd,ulfr,urdl,urdf,urld,urlf,urfd,urfl,ufdl,ufdr,ufld,uflr,ufrd,ufrl,dulr,dulf,durl,durf,dufl,dufr,dlur,dluf,dlru,dlrf,dlfu,dlfr,drul,druf,drlu,drlf,drfu,drfl,dful,dfur,dflu,dflr,dfru,dfrl,ludr,ludf,lurd,lurf,lufd,lufr,ldur,lduf,ldru,ldrf,ldfu,ldfr,lrud,lruf,lrdu,lrdf,lrfu,lrfd,lfud,lfur,lfdu,lfdr,lfru,lfrd,rudl,rudf,ruld,rulf,rufd,rufl,rdul,rduf,rdlu,rdlf,rdfu,rdfl,rlud,rluf,rldu,rldf,rlfu,rlfd,rfud,rful,rfdu,rfdl,rflu,rfld,fudl,fudr,fuld,fulr,furd,furl,fdul,fdur,fdlu,fdlr,fdru,fdrl,flud,flur,fldu,fldr,flru,flrd,frud,frul,frdu,frdl,frlu,frld) do for %%i in (%%j\*) do echo %%~zi>>%%j.csv
Автор: nik4z
Дата сообщения: 19.06.2016 21:47
YuS_two
Примерно как-то так

Код: for %%j in (b,u,d,l,r,f,ud,ul,ur,uf,du,dl,...,frld) do (
for %%i in (%%j\*) do (
echo.|set /p= %%~zi;>>1.csv
echo.>>1.csv
)
)
Автор: YuS_two
Дата сообщения: 20.06.2016 07:00
lorents

Цитата:
одинаковые названия файлов

Хмм, тогда вопрос, опять же из любопытства: а расширения у них какие?

nik4z

Цитата:
Примерно как-то так

Точно! Вот ведь... есть же более простой вариант, а то тут шарики за ролики заехали из-за ненужных усложнений. Спасибо, за пинок в нужную сторону.
Только, требуется разделение на столбцы по папкам (это я уже стелепатировал), но это уже детали, которые решаются просто.

Код: @echo off
for %%j in (b,u,d,l,r,f,ud,ul,ur,uf,du,dl,dr,df,lu,ld,lr,lf,ru,rd,rl,rf,fu,fd,fl,fr,udl,udr,udf,uld,ulr,ulf,urd,url,urf,ufd,ufl,ufr,dul,dur,duf,dlu,dlr,dlf,dru,drl,drf,dfu,dfl,dfr,lud,lur,luf,ldu,ldr,ldf,lru,lrd,lrf,lfu,lfd,lfr,rud,rul,ruf,rdu,rdl,rdf,rlu,rld,rlf,rfu,rfd,rfl,fud,ful,fur,fdu,fdl,fdr,flu,fld,flr,fru,frd,frl,udlr,udlf,udrl,udrf,udfl,udfr,uldr,uldf,ulrd,ulrf,ulfd,ulfr,urdl,urdf,urld,urlf,urfd,urfl,ufdl,ufdr,ufld,uflr,ufrd,ufrl,dulr,dulf,durl,durf,dufl,dufr,dlur,dluf,dlru,dlrf,dlfu,dlfr,drul,druf,drlu,drlf,drfu,drfl,dful,dfur,dflu,dflr,dfru,dfrl,ludr,ludf,lurd,lurf,lufd,lufr,ldur,lduf,ldru,ldrf,ldfu,ldfr,lrud,lruf,lrdu,lrdf,lrfu,lrfd,lfud,lfur,lfdu,lfdr,lfru,lfrd,rudl,rudf,ruld,rulf,rufd,rufl,rdul,rduf,rdlu,rdlf,rdfu,rdfl,rlud,rluf,rldu,rldf,rlfu,rlfd,rfud,rful,rfdu,rfdl,rflu,rfld,fudl,fudr,fuld,fulr,furd,furl,fdul,fdur,fdlu,fdlr,fdru,fdrl,flud,flur,fldu,fldr,flru,flrd,frud,frul,frdu,frdl,frlu,frld) do (
if exist "%%j\*.*" (
for %%i in (%%j\*) do (
echo %%~zi;>>%%j.csv
)
)
)
Автор: lorents
Дата сообщения: 20.06.2016 10:55
YuS_two
Понял Вас. Попробую объяснить по другому.
у меня есть папка, тем находится 206 папок, в каждой папке 8185 файлов (название файлов и расширения одинаковые, отличие только в размере файла). Мне нужно построить таблице, состоящую из 8185 строк и 206 папок, в каждой ячейка указать размер файла.
Суть такая - мне нужно получить таблицу, где я могу посмотреть как меняется размер каждого файла.

Посмотрите на данный пример

Код: @echo off

for %%i in (x\*) do call :s1 "b\%%~nxi" "u\%%~nxi" "d\%%~nxi" "l\%%~nxi" "r\%%~nxi" "f\%%~nxi"

:s1
shift
echo %~z0;%~z1;%~z2;%~z3;%~z4;%~z5>>1.csv
exit /b
Автор: nik4z
Дата сообщения: 20.06.2016 12:51
lorents

Цитата:
Посмотрите на данный пример


Код: for %%i in (b\*) do (
for %%j in (b,u,d,l,r,f,ud,ul,ur,uf,du,dl,...,frld) do call :_1 "%%j\%%nxi"
echo.>>1.csv
)
goto :eof
:_1
echo.|set /p= %%~z1;>>1.csv
goto :eof
Автор: YuS_two
Дата сообщения: 20.06.2016 19:40
lorents

Цитата:
название файлов и расширения одинаковые, отличие только в размере файла

Вотжеж... похоже, что начать надо было с того, что одинаковые названия и расширения у файлов в разных папках...

Цитата:
Как мне объединить эти файлы в единую таблицу, где каждый тестовой файл и есть столбец.


Цитата:
Наоборот, строк 8185 (по каждому файлу), столбцов 206 (по каждой папке)

Ну, как это сделать на чистом cmd, на другом форуме в двух вариантах, а я могу предложить ещё на powershell - напрямую в Excel будут заполнятся ячейки с форматированием, правда не очень быстро (зато наглядно ), но тут уже ничего не поделать:

Код: $pth='c:\TEST'
$fp='b','u','d','l','r','f','ud','ul','ur','uf','du','dl','dr','df','lu','ld','lr','lf','ru','rd','rl','rf','fu','fd','fl','fr','udl','udr','udf','uld','ulr','ulf','urd','url','urf','ufd','ufl','ufr','dul','dur','duf','dlu','dlr','dlf','dru','drl','drf','dfu','dfl','dfr','lud','lur','luf','ldu','ldr','ldf','lru','lrd','lrf','lfu','lfd','lfr','rud','rul','ruf','rdu','rdl','rdf','rlu','rld','rlf','rfu','rfd','rfl','fud','ful','fur','fdu','fdl','fdr','flu','fld','flr','fru','frd','frl','udlr','udlf','udrl','udrf','udfl','udfr','uldr','uldf','ulrd','ulrf','ulfd','ulfr','urdl','urdf','urld','urlf','urfd','urfl','ufdl','ufdr','ufld','uflr','ufrd','ufrl','dulr','dulf','durl','durf','dufl','dufr','dlur','dluf','dlru','dlrf','dlfu','dlfr','drul','druf','drlu','drlf','drfu','drfl','dful','dfur','dflu','dflr','dfru','dfrl','ludr','ludf','lurd','lurf','lufd','lufr','ldur','lduf','ldru','ldrf','ldfu','ldfr','lrud','lruf','lrdu','lrdf','lrfu','lrfd','lfud','lfur','lfdu','lfdr','lfru','lfrd','rudl','rudf','ruld','rulf','rufd','rufl','rdul','rduf','rdlu','rdlf','rdfu','rdfl','rlud','rluf','rldu','rldf','rlfu','rlfd','rfud','rful','rfdu','rfdl','rflu','rfld','fudl','fudr','fuld','fulr','furd','furl','fdul','fdur','fdlu','fdlr','fdru','fdrl','flud','flur','fldu','fldr','flru','flrd','frud','frul','frdu','frdl','frlu','frld'
$Excel=New-Object -ComObject Excel.Application
$Excel.Visible=$true
$WorkBook=$Excel.Workbooks.Add()
$WSheet=$WorkBook.Worksheets.Item(1)
$WSheet.Name='Размеры'

$i=1
$n=2
foreach ($fd in $fp){
if(test-path $pth\$fd\*.*){
$WSheet.Cells.Item(1,$i)=$fd
foreach($file in (dir -recurse $pth\$fd\*.*)){
$WSheet.Cells.Item($n, $i) = $file.length
$n++
}
$i++
}
$n=2
}
$UsedRange = $WSheet.UsedRange
$UsedRange.EntireColumn.AutoFit() | Out-Null
Автор: lorents
Дата сообщения: 20.06.2016 23:25
YuS_two
Вам отдельное спасибо за помощь!!!
Все спасибо вопрос решен.

Автор: Merlin2006
Дата сообщения: 20.07.2016 18:30
Нужна помощь!
Просьба помочь с написанием батника такого плана
1. Ищет в реестре базы 1С .7.7 и получает их пути (сделал через выгрузку реестра)
2. Создает батник резервного копирования найденных баз только при их изменении (тоже готов, но с прописанными вручную путями + задача на выполнение в планировшик).
Так вот, заготовки есть, а вот как полученные пути из первого пункта добавить в батник второго пункта (автоматом) - в этом вся загвоздка...

Заранее спасибо за помощь.
Автор: zerno777
Дата сообщения: 21.07.2016 10:16
Добрый день, прошу помощи.

есть папка с 8-ю зип архивами (ежесуточный бекап)

нужен батник который будет контролировать даты файлов, т.е. контроль что бекап(архив) создался ...
батник должен определить текущую дату и перебрать даты всех файлов в папке,
если дата файла вышла за период текущая минус 8 дней то сделать вывод в лог.
заранее спасибо.
Автор: bomzz
Дата сообщения: 21.07.2016 11:34
updatelist

сижу туплю, давно батники не писал, никто не поможет вырезать из этого списка только имена обновлений KB2281679
Автор: Pasha_ZZZ
Дата сообщения: 21.07.2016 11:54
bomzz
Цитата:
@echo off
del /f /q KB.txt
type list.txt>list_ansi.txt
for /f "tokens=4-5 skip=1" %%a in (list_ansi.txt) do call :KBName %%a %%b>>KB.txt
goto :eof

:KBName
if "%1"=="Update" (echo.%2)&&goto :eof
echo.%1
goto :eof
Автор: bomzz
Дата сообщения: 21.07.2016 17:49
Pasha_ZZZ
спасибо большое, так трудно вспоминать что к чему
это для темы висты
http://forum.ru-board.com/topic.cgi?forum=62&bm=1&topic=18652&start=180#lt
Автор: tdmods
Дата сообщения: 21.07.2016 21:54
Можно ли заставить bat файл дождаться запуска определенного процесса?
Автор: bomzz
Дата сообщения: 22.07.2016 04:36
tdmods
можно, распечатать все процессы через wmi в списке поискать нужный
Автор: YuS_two
Дата сообщения: 22.07.2016 08:13
tdmods

Цитата:
Можно ли заставить bat

можно:

Код: @echo off
:loop
cls
tasklist|find "process"
if errorlevel 1 (echo Process waiting...&&timeout /t 5&&goto loop)
echo Congratulations! The process launched.
pause
Автор: mat86
Дата сообщения: 26.07.2016 10:54
Помогите создать bat
Идея такая: при запуске bat он заменяет Winre.wim (стандартное "средство устранения неполадок", а по сути небольшой Windows PE) вызываемый по нажатию f8 в начале загрузки windows 7 и выше, на свой Windows PE (Bart PE).

Задача:

При запуске bat он ищет по всем дискам файл \BWIM\boot.wim и \BWIM\boot64.wim (для 64 разрядных систем).

При нахождении ищет по всем дискам файл \Recovery\***\Winre.wim (где *** - папка с разным именем на разных пк).

При нахождении переименовывает Winre.wim в Winre.wim.bak.

Далее смотрит наличие папки (диск на котором \Recovery\***\Winre.wim):\Windows\SysWOW64\, то есть проверяет разрядность.

Если такая папка есть копирует \BWIM\boot64.wim в \Recovery\***\ (где *** - папка с разным именем на разных пк) с именем Winre.wim.

Если папки SysWOW64 нет копирует \BWIM\boot.wim в \Recovery\***\ с именем Winre.wim

Как найти BWIM\boot.wim по всем дискам реализовать могу, а дальше не знаю, помогите пожалуйста
Автор: Zumpel
Дата сообщения: 26.07.2016 11:22
Здравствуйте народ! Помогите мне в одном вопросе, описываю процесс: запускаю приложение (игру), в системе win7_64, все работает, но присутствуют значительные лаги. Если выйти на раб. стол через альт-таб, затем вызвать дисп. задач и в процессах выставить приоритет этой игре - "высокий", затем войти обратно в игру, лаги тем временем станут еще чаще, подождать пару секунд, и вернуть приоритет обратно в "средний", тормознутость приложения прекращается! (пробовал разные варианты, но лечиться именно так)
Так вот вопрос, можно ли как то автоматизировать этот процесс и посредством чего?
Автор: mat86
Дата сообщения: 26.07.2016 14:26
Есть команда запуска программы с нужным приоритетом, а нужна комманда изменения запущеного приоритета. Не знаю есть ли такая
Автор: Zumpel
Дата сообщения: 26.07.2016 20:11

Цитата:
Есть команда запуска программы с нужным приоритетом, а нужна комманда изменения запущеного приоритета. Не знаю есть ли такая

Так вот же, нагулить ни как не могу)
Автор: sundraw
Дата сообщения: 27.07.2016 18:18
Всем доброго здоровья!
Имеется батник для замены текста в файлах

Код:
@echo off
SetLocal EnableExtensions EnableDelayedExpansion

Set infile=D:\BAT\1.txt
Set outFile=D:\BAT\BAT\1.txt
Set find=750
Set replace=1020

for /F "UseBackQ delims=" %%n in ("%infile%") do (
set "LINE=%%n"
echo=!LINE:%find%=%replace%!>>"%outFile%"
)
Автор: Pasha_ZZZ
Дата сообщения: 27.07.2016 18:22
sundraw
Цитата:
sed "s/750/1020/g"
как-то проще и быстрее
Автор: sundraw
Дата сообщения: 27.07.2016 18:53
Pasha_ZZZ

Цитата:
sundraw
Цитата:
sed "s/750/1020/g"
как-то проще и быстрее


Не совсем понял, куда его ставить Вопрос в том, что не появляется выходной файл с заменённым текстом. Может это связано с большими скоростями SSD ? Батник пролетает за доли секунды, не успевает найти нужный текст? Или что-то другое.
Автор: nik4z
Дата сообщения: 27.07.2016 19:28
sundraw

Цитата:
меется батник для замены текста в файлах

Прекрасно работает.
А каталог D:\BAT\BAT существует?
Автор: Pasha_ZZZ
Дата сообщения: 27.07.2016 19:45
sundraw
Цитата:
Не совсем понял, куда его ставить
Ну во-первых, нужен виндовый СЕД.
Во-вторых, ему на вход нужно подать файл (или указать в комстроке). Полный вариант примерно такой:
Цитата:
type D:\BAT\1.txt|sed "s/750/1020/g">D:\BAT\BAT\1.txt

Автор: sundraw
Дата сообщения: 27.07.2016 20:33
nik4z
Каталог D:\BAT\BAT существует

Pasha_ZZZ
Спасибо, вариант действительно намного проще.

Автор: nik4z
Дата сообщения: 27.07.2016 20:41
sundraw
Тогда скорее всего в тексте присутствует служебный символ, который приволит к сбою скрипта.

Страницы: 123456789101112131415161718

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


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