Войти

Показать полную графическую версию : [решено] Вывести имена файлов *.txt в каталоге


Страниц : [1] 2

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

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

VALET93
22-06-2011, 17:10
megaloman, Спасибо большое! А как сделать если в папке нет файлов txt
тогда выводилось бы сообщение "В папке нет txt файлов"

megaloman
22-06-2011, 19:31
@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
Интересует то же самое, только для любых расширений файлов, желательно такой-же компактный код, и чтобы эти данные можно было записать в тхт или в лог, можно в том же каталоге откуда и запущен bat.

DesmondTruman
05-04-2012, 22:13
dee.jack

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

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

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

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

Спасибо.

ndvikulov
06-04-2012, 13:58
можно вывести в файл и потом считать

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

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

Iska
06-04-2012, 16:29
з.ы. не получилось вывод 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
Спасибо!

DesmondTruman
06-04-2012, 19:55
Iska
"%~dp0*.shp" 2^>nul')
Для чего служат цифры перед символом перенаправления?

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

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

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

См. также:
Стандартные потоки — Википедия (http://ru.wikipedia.org/wiki/%D0%A1%D1%82%D0%B0%D0%BD%D0%B4%D0%B0%D1%80%D1%82%D0%BD%D1%8B%D0%B5_%D0%BF%D0%BE%D1%82%D0%BE%D0%BA%D0 %B8).
stdin, stdout, stderr (http://msdn.microsoft.com/en-us/library/3x292kth.aspx)

Iska
06-04-2012, 23:53
Файл то открывается, а вот консоль батника не закрывается автоматом, а только после закрытия самого logfile.txt. Пробовал ниже ставить end, exit - не помогает. Может есть такая команда, которая бы закрыла консоль, а logfile.txt оставался бы открытым при этом. »
start "" notepad.exe "C:\блабла\блабла\logfile.txt"

ndvikulov
07-04-2012, 10:24
Ребята, еще одна задачка :) Помогите, плиз.

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

Например, такой файл:
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
можно как нибудь переменную %DATE% увеличивать и уменьшать?

ndvikulov
07-04-2012, 18:01
сделал так:


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


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

Спасибо. :)




© OSzone.net 2001-2012