|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Поиск файла с похожим именем |
|
|
CMD/BAT - Поиск файла с похожим именем
|
Новый участник Сообщения: 3 |
Профиль | Отправить PM | Цитировать Добрый день
Слабо еще знаком с команадми Прошу Вашей помощи в решении рабочей задачки Есть файл (KWTFCB_123.txt) в начале имени которого присутствует всегда один и тот же набор символов "KWTFCB", нумерация соответственно меняется. Это ответ на ранее посланный файл 123.txt. В виду того, что количество этих сообщений огромно. Необходимо сделать батник, который будет брать за основу KWTFCB_123.txt и находить его пару 123.txt в другой директории. Спасибо. |
|
Отправлено: 10:10, 14-02-2012 |
Ветеран Сообщения: 2708
|
Профиль | Отправить PM | Цитировать Найти элементарно, но зачем? Что потом с этой парой файлов делать? А что делать, если соответствие не найдено? Какую утилитарную задачу Вы хотите решить?
|
------- Отправлено: 16:28, 14-02-2012 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать unw1ck3d, например, так:
@echo off setlocal enableextensions enabledelayedexpansion set sFile=%~nx1 set sPath=%~2 if defined sFile ( if defined sPath ( if exist "%sPath%\%sFile:KWTFCB_=%" ( echo File [%sPath%\%sFile:KWTFCB_=%] found ) else ( echo File [%sPath%\%sFile:KWTFCB_=%] not found ) ) else ( echo Usage: "%~nx0" ^<File^> ^<Path^> ) ) else ( echo Usage: "%~nx0" ^<File^> ^<Path^> ) endlocal exit /b P.S. Присоединюсь к вопросу коллеги megaloman'а. |
Отправлено: 16:49, 14-02-2012 | #3 |
Новый участник Сообщения: 3
|
Профиль | Отправить PM | Цитировать megaloman, прошу меня простить, умолчал
задача сводиться к тому, что при успешном нахождении пары файлов выкидывать оба *.txt в третью директорию. Если же соответствие не найдено, то ничего не делать. Причем KWTFCB_123.txt лежат все в одной директории, а поиск 123.txt происходит в многоуровневой директории. Как можно производить поиск 123.txt в директории по всем папкам данной директории? На самом деле задача еще больше. Первую часть мне удалось решить, а вот со второй частью справиться не хватило знаний. Команда help и все "вытекающие" мне не ясны. Прошу Вас подсказать с какой литературой ознакомиться. Не могу понять операции с переменными. На тот вопрос, который я задал Вам, мне предлагали решить задачу на C#. Iska, спасибо за помощь!!! Есть еще один вопрос. Есть ли возможность в батниках делать запрос на ввод с клавиатуры, для того, чтобы именовать файлы? Спасибо. |
Последний раз редактировалось unw1ck3d, 15-02-2012 в 09:51. Отправлено: 08:55, 15-02-2012 | #4 |
Старожил Сообщения: 415
|
Профиль | Отправить PM | Цитировать |
|
Отправлено: 09:01, 15-02-2012 | #5 |
Ветеран Сообщения: 2708
|
Профиль | Отправить PM | Цитировать Вариант1
@Echo Off Set In1=E:\Delete\KWTFCB Set In2=E:\Delete\123 Set Out=E:\Delete\KWTFCB_123 SetLocal EnableExtensions SetLocal EnableDelayedExpansion FOR %%k IN ("%In1%\KWTFCB_*.txt") DO ( Set kFile=%%~nxk Set kFile=!kFile:KWTFCB_=! FOR /R "%In2%" %%f IN (!kFile!) DO If Exist "%%f" Move /Y "%%k" "%Out%\" && Move /Y "%%f" "%Out%\" ) @Echo Off Set In1=E:\Delete\KWTFCB Set In2=E:\Delete\123 Set Out=E:\Delete\KWTFCB_123 SetLocal EnableExtensions SetLocal EnableDelayedExpansion FOR %%k IN ("%In1%\KWTFCB_*.txt") DO ( Set kFile=%%~nxk Set kFile=!kFile:KWTFCB_=! FOR /F "usebackq delims=" %%f IN (`Dir "%In2%\!kFile!" /b /s /A:-D`) DO Move /Y "%%k" "%Out%\" && Move /Y "%%f" "%Out%\" ) |
------- Последний раз редактировалось megaloman, 15-02-2012 в 12:18. Причина: Дополнение Отправлено: 11:15, 15-02-2012 | #6 |
Новый участник Сообщения: 3
|
Профиль | Отправить PM | Цитировать Полная задача выглядит так:
В исходной директории с:\365-P\First хранятся запросы 123*.txt, разбросанные по папкам по следующей структуре C:\365-P\First\Out\2012\01\10 (C:\365-P\YYYY\MM\DD) Пользователь "ручками" отправляет документ 123*.txt на проверку. Файлы 123*.txt проходят проверку и сваливаются в виде ответов в одну папку без структуры c:\365-P\For_check\. Отбор файлов происходит по одной строке "20@@@" внутри каждого KWTFCB_*.txt. Если строка присутствует в файле, то он падает в папку c:\365-P\For_check\Done. Если такой строки нет, то c:\365-P\For_check\Error. Используя часть чужого кода, создал следующее: cd For_check findstr /l /m /x /c:20@@@ >>baselist.ext *.txt Set List=baselist.ext Set Dst=C:\365-P\For_check\done if not exist %List% ( echo List-file not found! exit 1 ) Set log="%~dpn0.log" Set tmp="%~dpn0.tmp" Set wrk="%~dpn0.lst" echo ======= %date% %time:~0,8% =======>>%log% del /f %wrk% 2>nul dir /a /b /on /s>%tmp% for /f "usebackq tokens=* delims=" %%F in ("%List%") do findstr /c:"%%F" %tmp%>>%wrk% for /f "usebackq tokens=* delims=" %%F in (%wrk%) do ( copy /b /y "%%F" "%Dst%" >nul 2>nul del /q "%%F" if errorlevel 1 (echo Can`t copy %%F to "%Dst%">>%log%) else (echo File %%F copied>>%log%) ) del /f %tmp% del /f %wrk% del /f %log% del /q baselist.ext move *.txt Error cd Error dir /b >> c:\365-P\For_check\errorlist.ext Тело кода позаимствовал. Понял только как задать переменную. А вот все, что творит батник от команды "findstr" до "move" мне не понятно. После этого начинается вторая часть задачи. Найти "пару" для каждого неверного ответа (где отсутствует строка 20@@@) и выгрузить оба файла в одну директорию. Iska, попробовал Ваш код, но не могу разобраться, дабы подбить батник под свои цели. Но все равно спасибо. Подскажите, что означает %слово% заключенное в проценты? 2>nul? |
Отправлено: 14:01, 15-02-2012 | #7 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата unw1ck3d:
|
|
Отправлено: 15:50, 15-02-2012 | #8 |
Новый участник Сообщения: 32
|
Профиль | Отправить PM | Цитировать unw1ck3d, обычно слово заключенное в "проценты" - это переменная. То есть:
Простой пример... Есть такая переменная - date - она, по умолчанию, равна текущей дате... Echo date даст на выход слово "date" а вот echo %date% в моем случае, на момент написания сообщения даст результат "17.02.2012" и, для примера... set segod=segodnya %date% Это мы создаем переменную "segod" со значением равным слову segodnya и, через пробел, текущей дате... То есть Echo %segod% на выходе даст "segodnya 17.02.2012", только без кавычек... Обычно так... про другие случаи я не знаю |
------- Отправлено: 09:07, 17-02-2012 | #9 |
Новый участник Сообщения: 4
|
Профиль | Сайт | Отправить PM | Цитировать |
Отправлено: 14:44, 19-08-2019 | #10 |
|
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - [решено] Поиск, остановка процесса, поиск и замена файла на разных дисках | Gawr33 | Скриптовые языки администрирования Windows | 11 | 23-04-2011 23:09 | |
VBS/WSH/JS - [решено] Создание папок с именем файла и перемещение | SySTek | Скриптовые языки администрирования Windows | 2 | 02-03-2011 15:38 | |
CMD/BAT - [решено] Созд.*.txt по имени файла, с перемещением *.txt и файла в папку с именем файла. | OSArev | Скриптовые языки администрирования Windows | 2 | 30-01-2011 11:58 | |
[решено] Чтение текстового файла с неизвестным именем | ZeroCrash | AutoIt | 4 | 01-07-2009 19:03 | |
восстановление excel-файла, затертого другим файлом с тем же именем | XPurple | Хочу все знать | 4 | 03-01-2006 13:47 |
|