Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Directory printer (делает список файлов/папок) (http://forum.oszone.net/showthread.php?t=178591)

shadowbat 19-06-2010 07:30 1437265

Directory printer (делает список файлов/папок)
 
как реализовать принтер дерева файлов/папок в txt файл?

условия задачи:
1. BAT файл должен уметь делать список файлов по маске (например *.txt или *.*)

2. BAT файл должен уметь делать список папок и естественно подпапок

3. можно ли реализовать работу из текущей папки?
т.е. откуда запустили BAT, там он листинг и проводит (+ в подпапках тоже проводит листинг). т.е. подставляет путь своего местонахождения в переменную задания пути.
а также если возможно чтобы умел работать и с подстановкой пути. (например по умолчанию переменная x=CurrentDir, но пользователь туда может вписать свой путь например C:\Program Files). с этим путем BAT и будет работать.

получается маску файлов реализовать отдельной строкой нужно?
чтобы работало например так: x=CurrentDir, y=*.txt (либо например *.* по желанию пользователя) итого: x+y=CurrentDir:\*.txt

4. у пользователя должен быть выбор на п.1. или п.2.
это можно реализовать либо оператором case и чтобы BAT спрашивал "что выполнить? листинг файлов или листинг папок?"
либо реализовать любым друим способом

5. учесть работу с русскими именами (через chcp 1251 chcp 866 либо иным способом)

Specially for amel27: я 3-4 года пользуюсь каким то сторонним Directory printer'ом, но ваше решение меня просто убило. настолько простое, что добавив капельку функционала - получится мощный и полезный инструмент, а главное простой!

пример простенького листера файлов ( "резак" длинных имен с сохранением расширения) от amel27
Код:

set $m=%CD%
set $f=dir.txt
set mp=500

(for /f "delims=" %%a in ('dir /b/s "%$m%"') do @(
set "b=%%~dpna"&call echo.%%b:~0,%mp%%%%%~xa))>"%$f%"


amel27 19-06-2010 15:15 1437440

shadowbat, 1-4. ВСЁ это делает одна единственная команда DIR, т.е. весь смысл батника сводится к передаче ей нужных параметров: файлы/папки (параметр /A), начальная папка, маска и т.п. Варианты: через блок переменных, через параметры командной строки батника, интерактивно пользователем... как нужно?.. и нужно ли, если можно просто набрать в командной строке DIR с нужными параметрами? ;)

Цитата:

Цитата shadowbat
реализовать принтер дерева »

в качестве альтернативы DIR гляньте команду TREE - она не способна выводить файлы по маске, но каталоги печатает афигенно :)
Код:

Tree "%ProgramFiles%" /A >tree.txt
Цитата:

Цитата shadowbat
пример простенького листера файлов от amel27 »

не вводите народ в заблуждение - это не "листер файлов", а "резак" длинных имен с сохранением расширения... т.е. форматирование вывода всё того же DIR

shadowbat 03-07-2010 10:27 1446420

одно из решений: =)
Принтер Дерева папок:
Код:

Tree "%CD%" >tree.txt

deepred 03-07-2010 14:11 1446527

shadowbat,

а немножко фантазии?

Код:

Echo off&Chcp 866&Title L I S T I N G & Cls
set $dir=%1
set $mask=%2
set $list=%3
set $deep=%4

if "%$list%"=="" call :input
if "%$dir%"=="" set $dir=%CD%
if "%$list%"=="1" (set $list=D) else set $list=-D
if "%$deep%"=="1" set $deep=^/s

Dir /A%$list% %$deep% /d %$dir%\%$mask% > %$dir%\strr.lst

set /p dspl=Вывести листинг на экран? 1-да:
if "%dspl%" NEQ "1" (goto :eof) else type %$dir%\strr.lst

pause&goto :eof

:input
set /p $dir=Введите путь к директории, по умолчанию текущая:
set /p $mask=Укажите маску:
set /p $list=Укажите тип вывода, "1"-каталоги, "2"-файлы:
set /p $deep=Обрабатывать подкаталоги, "1"-да, "2"-нет:

Пример запуска из Run или CMD:
Код:

listing.bat "F:\2\part_name\dir_0014" *.* 1 1

shadowbat 13-12-2015 13:50 2584346

Код:

set $m=%CD%
set $f=dir.txt
set mp=500

(for /f "delims=" %%a in ('dir /b/s "%$m%"') do @(
set "b=%%~dpna"&call echo.%%b:~0,%mp%%%%%~xa))>"%$f%"

код не работает с файлами, у которых есть символ "&" в имени файла
например если в папке два файла:
file.txt
file & file.txt
то в dir.txt будет только file.txt
как то можно, чтобы в dir.txt записались оба файла?

Georgio 13-12-2015 14:32 2584362

Код:

@echo off

set "$m=%CD%"
set "$f=dir.txt"
set "mp=500"

(
for /f "delims=" %%a in ('dir/b/s "%$m%"') do @(
 set "b=%%~dpna"
 cmd/v/c echo.!b:~0^^,%mp%!%%~xa
)
)>"%$f%"


shadowbat 13-12-2015 20:03 2584475

Georgio спасибо, помогло


Время: 07:27.

Время: 07:27.
© OSzone.net 2001-