Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 07.11.2023, 00:48
Кандидат Javascript-наук
Отправить личное сообщение для mik888em Посмотреть профиль Найти все сообщения от mik888em
 
Регистрация: 21.06.2020
Сообщений: 145

Почему при работе батника не отображается результат поиска файла?
Написал батник который ищет путь к файлу Magneto.exe на всех дисках компьютера.
Указал чтоб батник искал до 600 секунд, если в течении 600 секунд ничего не нашел, то он сам закрывается.

После запуска батника, примерно через 20 секунд я вижу что в папке C:\Users\Administrator\AppData\Local\Temp появился пустой файл temp_search_results_23645.txt , и далее через примерно 10-15 секунд я вижу что в этот файл записался правильный результат , тот что мне и нужен: C:\Users\Administrator\Downloads\Magneto\Magneto\M agneto.exe

Батник сам закрылся после запуска через примерно 50 сек.

Почему в батнике не отображается путь к найденному файлу: C:\Users\Administrator\Downloads\Magneto\Magneto\M agneto.exe ?





Лог батника:
C:\Users\Administrator\Downloads>setlocal
C:\Users\Administrator\Downloads>set "searchID=23645"
C:\Users\Administrator\Downloads>set "tempfile=C:\Users\Administrator\AppData\Local\Temp\temp_search_results_23645.txt"
C:\Users\Administrator\Downloads>set "flagfile=C:\Users\Administrator\AppData\Local\Temp\temp_search_results_23645.txt.flag"
C:\Users\Administrator\Downloads>start /b cmd /c "(for %D in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do (dir /s /b "%D:\Magneto.exe" 2>nul >> "C:\Users\Administrator\AppData\Local\Temp\temp_search_results_23645.txt") && (echo Done > "C:\Users\Administrator\AppData\Local\Temp\temp_search_results_23645.txt.flag"))"
C:\Users\Administrator\Downloads>set /a "timeout=600"
C:\Users\Administrator\Downloads>if exist "C:\Users\Administrator\AppData\Local\Temp\temp_search_results_23645.txt.flag" (goto searchdone )
C:\Users\Administrator\Downloads>timeout /t 1 /nobreak  1>nul
C:\Users\Administrator\Downloads>(dir /s /b "C:\Magneto.exe"  2>nul 1>>"C:\Users\Administrator\AppData\Local\Temp\temp_search_results_23645.txt" )  && (echo Done  1>"C:\Users\Administrator\AppData\Local\Temp\temp_search_results_23645.txt.flag" )
C:\Users\Administrator\Downloads>set /a "timeout-=1"
C:\Users\Administrator\Downloads>if !timeout! LEQ 0 (goto searchdone )
C:\Users\Administrator\Downloads>set "filepath="
C:\Users\Administrator\Downloads>if exist "C:\Users\Administrator\AppData\Local\Temp\temp_search_results_23645.txt" (for /F "delims=" %I in ('type "C:\Users\Administrator\AppData\Local\Temp\temp_search_results_23645.txt"') do (
set "filepath=%~dpI"
 goto filefound
) )
C:\Users\Administrator\Downloads>if defined filepath (echo Found Magneto.exe at: Magneto.exe )  else (echo File Magneto.exe not found after 600 seconds. )
File Magneto.exe not found after 600 seconds.
C:\Users\Administrator\Downloads>del "C:\Users\Administrator\AppData\Local\Temp\temp_search_results_23645.txt"  2>nul
C:\Users\Administrator\AppData\Local\Temp\temp_search_results_23645.txt
C:\Users\Administrator\Downloads>del "C:\Users\Administrator\AppData\Local\Temp\temp_search_results_23645.txt.flag"  2>nul
C:\Users\Administrator\Downloads>endlocal
C:\Users\Administrator\Downloads>(dir /s /b "D:\Magneto.exe"  2>nul 1>>"C:\Users\Administrator\AppData\Local\Temp\temp_search_results_23645.txt" )  && (echo Done  1>"C:\Users\Administrator\AppData\Local\Temp\temp_search_results_23645.txt.flag" )
C:\Users\Administrator\Downloads>(dir /s /b "E:\Magneto.exe"  2>nul 1>>"C:\Users\Administrator\AppData\Local\Temp\temp_search_results_23645.txt" )  && (echo Done  1>"C:\Users\Administrator\AppData\Local\Temp\temp_search_results_23645.txt.flag" )




Код батника:
:: @echo off
setlocal

:: Создаем уникальный идентификатор для нашего процесса поиска
set "searchID=%random%"

:: Создаем временный файл для хранения результатов
set "tempfile=%temp%\temp_search_results_%searchID%.txt"
set "flagfile=%tempfile%.flag"

:: Запускаем поиск в фоновом режиме
start /b cmd /c "(for %%D in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do (dir /s /b "%%D:\Magneto.exe" 2>nul >> "%tempfile%") && (echo Done > "%flagfile%"))"

:: Ожидаем завершения поиска или истечения таймера
set /a "timeout=600"

:waitloop
if exist "%flagfile%" (
    goto searchdone
)
timeout /t 1 /nobreak >nul
set /a "timeout-=1"
if !timeout! leq 0 (
    goto searchdone
)
goto waitloop

:searchdone
:: Проверяем, нашелся ли файл и извлекаем путь
set "filepath="
if exist "%tempfile%" (
    for /f "delims=" %%I in ('type "%tempfile%"') do (
        set "filepath=%%~dpI"
        goto filefound
    )
)

:filefound
if defined filepath (
    echo Found Magneto.exe at: %filepath%Magneto.exe
) else (
    echo File Magneto.exe not found after 600 seconds.
)

:: Очищаем временные файлы
del "%tempfile%" 2>nul
del "%flagfile%" 2>nul

endlocal
Ответить с цитированием
  #2 (permalink)  
Старый 08.11.2023, 13:07
Аватар для MallSerg
Профессор
Отправить личное сообщение для MallSerg Посмотреть профиль Найти все сообщения от MallSerg
 
Регистрация: 07.03.2011
Сообщений: 1,138

>> Почему в батнике не отображается путь к найденному файлу

Потому что системная утилита start создает отдельный процесс никак ни связанный с батником.

Для таких задач гораздо проще использовать PowerShell, WSH, C#, WQL.
Лично я в юности использовал Autoit и PHP_win из за простоты и нулевого порога вхождения а сейчас обычно C# + WMI
Ответить с цитированием
  #3 (permalink)  
Старый 08.11.2023, 14:32
Кандидат Javascript-наук
Отправить личное сообщение для mik888em Посмотреть профиль Найти все сообщения от mik888em
 
Регистрация: 21.06.2020
Сообщений: 145

все спасибо . уже сам разобрался!
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Возврат значения из Php файла при работе через ajax shiva Javascript под браузер 5 06.08.2019 08:00
Вопрос по контексту в ноде при исполнении файла. belozerskiy Node.JS 1 27.09.2016 01:14
Форма поиска. Результат ken3013 Общие вопросы Javascript 0 29.11.2014 06:33
Почему скрипт отрабатывает в IE только при первом входе на сайт? tygeddar Элементы интерфейса 3 20.09.2012 01:37
проблема с событиями при работе с Ext.extend slavik27 ExtJS 1 04.09.2011 13:05