Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MS Windows > Bat; поиск по определенным параметрам


Автор: Shadowlord 4.2.2009, 21:32
Возможно ли в windows написать батник который будет искать файлы вот по такому условию "В имени есть цифры, в расширении цифр нет."

Автор: Akina 4.2.2009, 21:50
Формально можно, но это будет тот ещё крокодил... почему не написать VBS-скрипт?

Автор: Shadowlord 5.2.2009, 03:44
Задача стоит написать батник, нужно будет дальше использовать. Возможно это задания как раз для сравнения, но что то я не могу сообразить как это сделать

Автор: 01MDM 5.2.2009, 09:57
Shadowlord, если правильно понял, то нужно найти файл(ы), который содержит цифры в имени и у которого нет цифр в расширении

Код

@echo off
for /f "tokens=*" %%i in ('dir /b /s /a-d "C:\Some Path\To\Folder"') do (
    echo %%~ni | findstr [0-9] 1>nul && (
        echo %%~xi | findstr /v [0-9] 1>nul && echo %%~nxi
    )
)


Будут рекурсивно найдены файлы, удовлетворяющие условию задачи, из некой корневой папки (любой).
Если надо полные пути к файлам, то последнее `echo.....` замени на `echo %%~fnxi`

Автор: Shadowlord 5.2.2009, 10:32
А возможно ли заставить его искать в том каталоге  из которого его запустили?



Автор: 01MDM 5.2.2009, 11:28
Shadowlord, 

Цитата

А возможно ли заставить его искать в том каталоге  из которого его запустили?


Убери указание каталога после `dir /b /s /a-d`

ты наверное имел ввиду нечто вроде:

Код

@echo off
chcp 1251 1>nul
(
echo ^<html^>
echo ^<head^>
echo ^<title^>Lab_1</title^>
echo ^</head^>
echo ^<body^>
echo ^<h3^>Hello World!^</h3^>
echo.
echo ^<h4^>Задание №1^</h4^>
echo ^<dt^>В имени есть последовательность "ab"^</dt^>
echo ^<dt^>    выполняем `dir *ab*`^</dt^>
dir *ab*
echo.
echo ^<h4^>Задание №2^</h4^>
echo ^<dt^>В имени есть цифры, в расширении цифр нет^</dt^>
echo ^<pre^>
echo for /f "tokens=*" %%i in ^('dir /b /s /a-d'^) do ^(
echo    echo %%~ni ^| findstr [0-9] 1^>nul && ^(
echo        echo %%~xi ^| findstr /v [0-9] 1^>nul && echo %%~nxi
echo    ^)
echo ^)
echo ^</pre^>
call:write_task
echo ^</body^>
echo ^</html^>
) 1>>out.html

:write_task
for /f "tokens=*" %%i in ('dir /b /s /a-d') do (
   echo %%~ni | findstr [0-9] 1>nul && (
       echo %%~xi | findstr /v [0-9] 1>nul && echo ^<dt^>%%~nxi^</dt^> 1>>out.html
   )
)


Автор: Shadowlord 5.2.2009, 11:34
собственно да, только не мог бы ты пояснить как это то дело работает, да и возможно ли указывать  директорию в которой будет идти поиск
к примеру 1.bat c:\123

Автор: 01MDM 5.2.2009, 11:42
Shadowlord, если тебе надо указать директорию в качестве параметра к батнику, то тогда так:

Код

for /f "tokens=*" %%i in ('dir /b /s /a-d %1')......

Автор: Shadowlord 5.2.2009, 11:47
01MDM,  не подскажешь где можно про все это почитать сайт какой или книжку
пытался запустить твой код выдает ошибку
"Синтаксическая ошибка в имени файла, имени папки или метке тома.
"(" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом."
 вот такой вариант работает
Код

@echo off
set OUTPUT=out.html

if "%STDOUT_REDIRECTED%" == "" (
    set STDOUT_REDIRECTED=yes
    cmd.exe /c %0 %* >%OUTPUT%
    exit /b %ERRORLEVEL%
)

echo ^<html^>
echo ^<head^>
echo ^<title^>This is a greeting page^</title^>
echo ^</head^>
echo ^<body^>
echo Hello World! ^<p^>
echo Весь список файлов в директории ^<p^>
dir /b
echo  ^<p^>
echo Задание 1: ^<p^>
dir  /b *ab*
echo  ^<p^>
echo Задание 2: ^<p^>
@echo off
for /f "tokens=*" %%i in ('dir /b /s /a-d ') do (
    echo %%~ni | findstr [0-9] 1>nul && (
        echo %%~xi | findstr /v [0-9] 1>nul && echo %%~nxi
    )
)

echo ^</body^>
echo ^</html^>




Вот пытаюсь найти все файлы имя которых содержит подстроку ab
dir %1 /b  *ab* 
а в результате получаю список файлов лежащих в папке указанной в качестве  параметра и список файлов содержащих подстроку из текущей директории,  как его заставить искать в то что параметром указана

Автор: 01MDM 5.2.2009, 18:30

dir /b "%~1\*ab*"

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)