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%"
условия задачи:
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%"