Войти

Показать полную графическую версию : [решено] Directory printer (делает список файлов/папок)


shadowbat
19-06-2010, 07:30
как реализовать принтер дерева файлов/папок в 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
shadowbat, 1-4. ВСЁ это делает одна единственная команда DIR, т.е. весь смысл батника сводится к передаче ей нужных параметров: файлы/папки (параметр /A), начальная папка, маска и т.п. Варианты: через блок переменных, через параметры командной строки батника, интерактивно пользователем... как нужно?.. и нужно ли, если можно просто набрать в командной строке DIR с нужными параметрами? ;)

реализовать принтер дерева »в качестве альтернативы DIR гляньте команду TREE - она не способна выводить файлы по маске, но каталоги печатает афигенно :)Tree "%ProgramFiles%" /A >tree.txt

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

shadowbat
03-07-2010, 10:27
одно из решений: =)
Принтер Дерева папок:
Tree "%CD%" >tree.txt

deepred
03-07-2010, 14:11
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
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
@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
Georgio спасибо, помогло




© OSzone.net 2001-2012