2012-04-17 1 views
1

не уверен, что лучше (или )), чтобы написать сценарий летучей мыши для ввода имени и поиска в каталоге, чтобы узнать, существует ли он.BAT-скрипт для поиска каталогов для папок, соответствующих имени ввода

Нужно ли мне сначала выводить список каталогов в файл перед запуском сравнения?

и если это имеет значение, каталог находится в репозитории, поэтому для моих целей я буду использовать 'svn list', но я подумал, что приятное общее решение для всех было бы неплохо.

ответ

2

Если вы тестируете для определенного имени в каталоге, то вы, как правило, сделать что-то вроде:

if exist name (echo found it) else (echo not found) 

Или, если имя является неполным

if exist *name* (echo found it) else (echo not found) 

Если вы тестируете для имя в любом месте в дереве каталогов, то я бы использовал

dir /s /a-d *name* >nul && (echo found it) || (echo not found) 

Если вы являетесь эмитентом ng команда, которая генерирует строки вывода, и вы хотите проверить, существует ли имя в какой-либо одной строке, тогда Windows-трубы обычно работают нормально, если размер вывода не огромен, а вторая половина может идти в ногу с 1-й половина.

yourCommand | find "name" >nul && (echo found it) || (echo not found) 

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

set tempFile="%temp%\myTempFileBaseName%random%.txt" 
yourCommand >%tempFile% 
<%tempFile% find "name" >nul && (echo found it) || (echo not found) 
del %tempFile% 

Обычно я использую трубы, если не знаю, что у меня проблема с производительностью.

+0

спасибо! но я получаю ошибку «еще было неожиданно в это время» при использовании ... 'dir/on/b/a: d C: \ projects' | find test> nul && (echo found it) else (echo not found) – user1229895

+0

Упс - глупая ошибка с моей стороны - исправлено – dbenham

+0

спасибо dbenham ;-) – user1229895

Смежные вопросы