View previous topic :: View next topic |
Author |
Message |
Ciber SLasH

Joined: 20 Aug 2005 Posts: 209 Location: С.-Петербург
|
(Separately) Posted: Wed Jan 16, 2013 16:52 Post subject: |
|
|
Попытка ответить самому себе на 2 вопрос:
Code: | @echo off
setlocal ENABLEEXTENSIONS
chcp 1251 > nul
set "mask=*.jpg *.jpeg *.jp2 *.jpc *.gif *.png *.psd *.tif *.pcx *.tga *.bmp *.htm *.html *.shtm *.shtml *.txt *.avi *.mpg *.mpeg *.m2v *.mpe *.asf *.mov *.rm *.doc* *.xls* *.ppt*"
set input="%~dp0test.txt"
set output="%~dp0--.lst"
if not [%input%]==[""] (
if exist %input% (
for /f "usebackq delims==" %%i in (%input%) do (
pushd "%%i"
for /d /r %%j in (*) do (
title "%%j"
rem pushd "%%j"
>nul 2>&1 dir /b/a-d/s %mask% || >>%output% echo(%%j\
rem popd
)
popd
)
) else (
echo Error: file [%input%] not found!
)
) else (
echo Usage: %~nx0 ^<File-list^>
)
|
Но не хочет работать, если файл test.txt содержит русские имена  |
|
Back to top |
|
 |
MVV

Joined: 15 Oct 2009 Posts: 4815 Location: Ростов-Дон
|
|
Back to top |
|
 |
Ciber SLasH

Joined: 20 Aug 2005 Posts: 209 Location: С.-Петербург
|
(Separately) Posted: Wed Jan 16, 2013 18:00 Post subject: |
|
|
Скрипт заработал (я ошибся в указании путей)
Code: | @echo off
setlocal ENABLEEXTENSIONS
chcp 1251 > nul
set input="%~dp0test.txt"
set output="%~dp0--.lst"
:: Archives
set "mask=*.zip *.rar *.7z *.tgz *.gz *.tar *.bz2"
:: IMG
set "mask=%mask% *.iso *.nrg"
:: Graph
set "mask=%mask% *.jpg *.jpeg *.jp2 *.jpc *.gif *.png *.psd *.tif *.pcx *.tga *.bmp"
:: HTML
set "mask=%mask% *.htm *.html *.shtm *.shtml *.mht*"
:: Audio
set "mask=%mask% *.mp3 *.flac *.ape *.wma"
:: Video
set "mask=%mask% *.avi *.mpg *.mpeg *.m2v *.mpe *.asf *.mov *.rm"
:: Docs
set "mask=%mask% *.txt *.doc* *.xls* *.ppt* *.pdf"
if not [%input%]==[""] (
if exist %input% (
copy nul %output% > nul
for /f "usebackq delims==" %%i in (%input%) do (
echo -----
echo Scan: %%i
echo -----
pushd "%%i"
dir /b /a-d /s %mask% > nul 2>&1 || echo(%%i>>%output%
for /d /r %%j in (*) do (
REM title %%j
echo %%j
dir /s /b /a-d %mask% > nul 2>&1 || echo(%%j\>>%output%
rem >nul 2>&1 dir /s /b /a-d %mask% || >>%output% echo(%%j\
)
popd
)
) else (
echo Error: file [%input%] not found!
)
) else (
echo Usage: %~nx0 ^<File-list^>
)
|
test.txt
Code: |
C:\RECYCLER\
C:\tmp\
|
Добавлено спустя 55 минут:
С первым вопросом разобрался:
>nul 2>&1 dir /b/a-d/s %mask% || >>"%output%" echo(%%$\
Выполнить поиск файлов по всем вложенным каталога, начиная с текущего, соответствующих маске (при этом перенаправление ошибок и вывода идёт на ус-во null, чтобы не было никакого вывода и установился флаг %ERRORLEVEL%). Если файлов таких нет, то выполняется вторая команда после || которая записывает в выходной файл путь.
По идее можно переписать так:
dir /b/a-d/s %mask% > nul 2>&1 || echo(%%$\>>"%output%"
Все вопросы решены, тему можно закрывать  |
|
Back to top |
|
 |
|