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

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

VALET93 22-06-2011 12:39 1699507

Вывести имена файлов *.txt в каталоге
 
Помогите реализовать задачу.
Нужно создать bat-ник который выведет на экран имена файлов txt
в котологе в котором находиться сам bat. Если txt файлов нет тогда вывести сообщение
пользователю что их нет. Все чтобы выводилось в самой командной строке.

megaloman 22-06-2011 15:09 1699613

Код:

@Echo off
Echo В папке %~dp0 ищем txt-файлы
Dir /B /A:-D %~dp0*.txt
Pause


VALET93 22-06-2011 17:10 1699699

megaloman, Спасибо большое! А как сделать если в папке нет файлов txt
тогда выводилось бы сообщение "В папке нет txt файлов"

megaloman 22-06-2011 19:31 1699774

Код:

@Echo off
cls
Echo В папке %~dp0 ищем txt-файлы
Dir /B /A:-D %~dp0*.txt 2>nul || Echo В папке %~dp0 txt-файлы не найдены
Pause


dee.jack 05-04-2012 17:26 1894113

Интересует то же самое, только для любых расширений файлов, желательно такой-же компактный код, и чтобы эти данные можно было записать в тхт или в лог, можно в том же каталоге откуда и запущен bat.

DesmondTruman 05-04-2012 22:13 1894313

dee.jack

Код:

@Echo off
chcp 1251
Dir "Полный\путь\до\каталога" /B> "%~dp0\logfile.txt"
exit


ndvikulov 06-04-2012 12:42 1894602

Здравствуйте. Похожая задача. У меня батник, а рядом файл с расширением определенным. Этот файл будет с разным именем каждый день. Как мне узнать имя единственного файла с определенным расширением в папке и записать это имя в переменную?

примерный алгоритм:
1. батник смотрит в своей папке имя файла с расширением .shp
2. записывает это имя в переменную для последующих команд.

з.ы. не получилось вывод dir записать в переменную - пишется только в файл.

Спасибо.

ndvikulov 06-04-2012 13:58 1894640

можно вывести в файл и потом считать

for /f %%i in (file.txt) do (
set VAR = %%i
echo %VAR%
)

но что то как то кривовато. есть изящнее способ?

Iska 06-04-2012 16:29 1894731

Цитата:

Цитата ndvikulov
з.ы. не получилось вывод dir записать в переменную - пишется только в файл. »

Попробуйте так:
Код:

@echo off
setlocal enableextensions enabledelayedexpansion

for /f "delims=" %%i in ('dir /b /a:-d "%~dp0*.shp" 2^>nul') do if not defined sFile set sFile=%%i
if defined sFile (echo [%sFile%]) else (echo Not found any [*.shp] files)

endlocal
exit /b


ndvikulov 06-04-2012 16:35 1894734

Спасибо!

DesmondTruman 06-04-2012 19:55 1894821

Iska
Цитата:

"%~dp0*.shp" 2^>nul')

Для чего служат цифры перед символом перенаправления?

dee.jack 06-04-2012 20:27 1894829

DesmondTruman,
Спасибо, особенно за это "chcp 1251" теперь в тексте нормальный шрифт, дело в том, что я находил уже подобный код, и эта проблема сейчас можно сказать решена. Еще после исполнения этих команд я пытаюсь вставить открытие этого тхт в конце исполнения этого батника, довольно простым способом, просто с новой строки путь к файлу тхт.
"C:\блабла\блабла\logfile.txt"
Файл то открывается, а вот консоль батника не закрывается автоматом, а только после закрытия самого logfile.txt. Пробовал ниже ставить end, exit - не помогает. Может есть такая команда, которая бы закрыла консоль, а logfile.txt оставался бы открытым при этом.

Iska 06-04-2012 23:38 1894903

Цитата:

Цитата DesmondTruman
Для чего служат цифры перед символом перенаправления? »

Для указания номера потока, который нужно перенаправить. Три потока имеют стандартизованные имена и номера: поток стандартного вывода «stdout» под номером «1», стандартный поток ошибки «stderr» под номером «2» и стандартный поток ввода «stdin» под номером «0». Естественно, ничто не мешает приложению использовать и другие потоки, с более высокими номерами, если они ему потребны.

В данном конкретном случае мы буквально говорим: нужно перенаправить стандартный поток ошибки в пустое устройство, тем самым подавляя вывод на экран любых сообщений об ошибках. Разумеется, если некое приложение не следует стандартам и тупо пишет ошибки и диагностику вместо «stderr» в стандартный поток вывода «stdout» — тут уж ничего не поделаешь.

См. также:
Стандартные потоки — Википедия.
stdin, stdout, stderr

Iska 06-04-2012 23:53 1894908

Цитата:

Цитата dee.jack
Файл то открывается, а вот консоль батника не закрывается автоматом, а только после закрытия самого logfile.txt. Пробовал ниже ставить end, exit - не помогает. Может есть такая команда, которая бы закрыла консоль, а logfile.txt оставался бы открытым при этом. »

Код:

start "" notepad.exe "C:\блабла\блабла\logfile.txt"

ndvikulov 07-04-2012 10:24 1895015

Ребята, еще одна задачка :) Помогите, плиз.

Как писал выше - батник получает имя файла с определенным расширением лежащим рядом с ним, а затем надо с именем файла произвести манипуляции.

Например, такой файл:
Europe_2_05.2012096.aqua.721.250m.shp
Как имея это имя в переменной %nameforfiles% батнику сказать, что 2012096 - это 5 апреля, 2012097 - соответственно 6 апреля и тд.
Задумка: прочитать имя и переименовать в "05.04.2012 aqua 721" (вместо "aqua" может быть "terra"; а вместо "721" может быть "367").

мой суперкод :)
Код:


::расположение папки MODIS
set dir=C:\Users\user\Desktop\MODIS\

::берем имя файла с расширением .shp лежащий рядом
setlocal enableextensions enabledelayedexpansion
for /f "delims=" %%i in ('dir /b /a:-d "%~dp0*.shp" 2^>nul') do if not defined sFile set nameforfiles=%%i
if defined sFile (echo [%nameforfiles%]) else (echo Not found any [*.shp] files)
endlocal

::смотри aqua или terra
echo %nameforfiles%|findstr "aqua"
if errorlevel 1

::::::::::::::тут надо как то хитро переменную %nameforfiles%
::::::::::::::привести к виду "05.04.2012 aqua 721"

ren %dir%new\shape\shape.dbf %nameforfiles%.dbf
ren %dir%new\shape\shape.shp %nameforfiles%.shp
ren %dir%new\shape\shape.shx %nameforfiles%.shx
ren %dir%new\shape\shape.prj %nameforfiles%.prj

move *.xml %dir%new\snimok
move *.aux %dir%new\snimok
move *.jgw %dir%new\snimok
move *.jpg %dir%new\snimok
move *.prj %dir%new\snimok
del /q *.zip
rmdir /s /q %dir%new\other
ren %dir%new %nameforfiles%
rmdir /s /q OK

pause


ndvikulov 07-04-2012 15:36 1895162

можно как нибудь переменную %DATE% увеличивать и уменьшать?

ndvikulov 07-04-2012 18:01 1895231

сделал так:

Код:

echo %nameforfiles%|findstr "aqua"
if "%errorlevel%"=="0" (set sputnik="aqua") else (set sputnik="terra")

echo %nameforfiles%|findstr "721"
if "%errorlevel%"=="0" (set chanel="721") else (set chanel="367")

set dateforrename=%date%

SET /P day=Today? (y/n):
if "%day%"=="y" (
goto next)
SET /P dateforrename=Enter new date:


буду благодарен, если предложите автоматическое решение

dee.jack 08-04-2012 12:34 1895561

Цитата:

Цитата Iska
@echo off
setlocal enableextensions enabledelayedexpansion
for /f "delims=" %%i in ('dir /b /a:-d "%~dp0*.shp" 2^>nul') do if not defined sFile set sFile=%%i
if defined sFile (echo [%sFile%]) else (echo Not found any [*.shp] files)
endlocal
exit /b »

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

У меня задачка схожая.
1. Найти файлы с расширением .xyz в директории на один уровень выше батника. ..\
2. В случае отсутсвия таких файлов, можно так же выдать сообщения об их отсутсвии.
3. В случае обнаружения таких файлов открыть их в приложении находящееся в директории батника pack.exe.

Foreigner 08-04-2012 12:51 1895586

dee.jack,
Код:

@echo off

pushd "%~dp0.."
if not exist *.xyz (

    echo No Files
    popd
    goto:eof

)
for /f "tokens=*" %%i in ('dir /b *.xyz') do start /w "" "%~dp0pack.exe" "%%i"
popd


dee.jack 10-04-2012 17:22 1897094

Foreigner,
Спасибо, нашёл этому применение с перенаправлением из другого батника посредством call. Ещё бы подобный скрипт был полезен для переменных расширений файлов примерно такого вида .jpg01, .jpg02, .jpg03 и т.д. Интересует как примерно обозначить их в скрипте выше, чтобы также происходило поочерёдное их открытие, и так же не влияло на название файла.


Проблему решил таким способом: *.jpg*

Спасибо. :)

ndvikulov 27-02-2013 09:25 2100029

Прошел год и решил кое-что модифицировать в скриптах и нашел эту тему :)

Как писалось выше, этот код позволяет узнать имя файла по расширению в папке в которой расположен .bat файл запущенный.

Код:

@echo off
setlocal enableextensions enabledelayedexpansion

for /f "delims=" %%i in ('dir /b /a:-d "%~dp0*.shp" 2^>nul') do if not defined sFile set sFile=%%i
if defined sFile (echo [%sFile%]) else (echo Not found any [*.shp] files)

endlocal
exit /b

А как мне узнать расширение мя файла по расширению, расположенного в другой папке? например %dir%

пробовал разные варианты - ничего не получается.
вот часть варианта, который я вижу вроде бы правильным, но не работает:
'dir %dir% /b /a:-d "%dir%*.shp" 2^>nul'

в чем ошибка?

sov44 27-02-2013 09:46 2100041

Цитата:

Цитата ndvikulov
мя файла по расширению »

Код:

@echo off
set folder="c:\windows"
set rs=*.log
for /f "delims=" %%a in ('dir /b /a-d "%folder%\%rs%"') do echo %%~na
pause


megaloman 27-02-2013 10:01 2100052

Или
Код:

@Echo Off
cls

Set Where=D:\У попа была собака\Поп ее любил

FOR %%f IN ("%Where%\*.exe") DO Echo %%~nxf

Если в имени не надо расширения, то DO Echo %%~nf

ndvikulov 28-02-2013 08:33 2100835

sov44, megaloman, Спасибо, что откликнулись!

sov44, ваш вариант не сработал.

megaloman, прекрасное решение! короткое и понятное!)

sov44 28-02-2013 08:47 2100840

Цитата:

Цитата ndvikulov
sov44, ваш вариант не сработал. »

Странно. Код рабочий. :dont-know

Димончик555 08-03-2014 16:21 2320811

Доброго дня!

@Echo off
chcp 1251
Dir "Polnyy\put\do\kataloga" /B> "%~dp0\logfile.txt"
pause


Вы знаете, этим батником выводятся три строки абракадабры всех регистров, вроде обезьяна пожмакала по клавишам.
Файл logfile.txt создается но в нем 0 байт.

Я именно разбираюсь как работают бат файлы, для меня это пока как говорится темный лес.

Foreigner 08-03-2014 16:33 2320816

Цитата:

Цитата Димончик555
Polnyy\put\do\kataloga »

В какой кодировке сам батник? Содержит ли путь кириллицу, сохраните батник в windows-1251 (ANSI).

Димончик555 08-03-2014 17:44 2320825

@Echo on - так лучше

Долго не мог войти в сеть. Папа отримонтировал утюг и вкключил его в другую розетку.

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

Экран на секунду погас, в доме приостановились на чуть холодильник и все. По-ходу в доме на четверть секунды ушло электричество, его всосал утюг.

Компьютер застыл вместе с изображением- курсор не мигает, мышки неслушает и клавиш. Не выключается. Я его из сети высмыкнул. Перегружал пять раз, пока все востановилось.

Димончик555 08-03-2014 18:02 2320833

Содержит ли путь кириллицу Не содержит. В этой же папке два батника еще, три текстовых файла, один atest.asm. Путь D:\MYPROG\vyvedet_imena_faylov.bat

Батник отсюда, из этой же темы http://forum.oszone.net/post-1699774-4.html

Foreigner 08-03-2014 18:22 2320843

Димончик555, Тогда я не знаю, что вы делаете не так, батник абсолютно рабочий. Приведите Ваш реальный вариант.

Димончик555 08-03-2014 18:22 2320845

Ага, ага chcp - Смена кодовой страницы.

Так я же полностью привел вариант, сообщение двадцать шесть. да, простите, я сам пока попробую те и те варианты, погуглю, если уже будет не сообразить, отпишусь.

Georgio 08-03-2014 19:29 2320868

Цитата:

Цитата Димончик555
Вы знаете, этим батником выводятся три строки абракадабры всех регистров, вроде обезьяна пожмакала по клавишам. »


Вот перевод зтих Ваших трёх строк:

Цитата:

Текущая кодовая страница: 1251
Системе не удается найти указанный путь.
Для продолжения нажмите любую клавишу . . .


Цитата:

Цитата Димончик555
Файл logfile.txt создается но в нем 0 байт. »

Цитата:

Системе не удается найти указанный путь.

Вывод: где-то ошибка в указанном в пакетном файле пути. Ошибка может быть в одной букве (как по Якубовичу).

Димончик555 08-03-2014 20:41 2320888

Спасибо!!!!

dee.jack 12-04-2014 14:16 2336746

Еще вопрос, возможно ли - чтоб bat производил операции с выделенными файлами в проводнике. Например запускаем bat и ставим на паузу, выделяем нужные .txt файлы и продолжаем работу.

Iska 12-04-2014 15:36 2336783

Цитата:

Цитата dee.jack
возможно ли - чтоб bat производил операции с выделенными файлами в проводнике. Например запускаем bat и ставим на паузу, выделяем нужные .txt файлы и продолжаем работу. »

Нет, невозможно. Поскольку пакетный файл не может являться клиентом Automation.

Единственный вариант — работать через «Oтправить…» или глагол контекстного меню для выделенных файлов.


Время: 01:27.

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