Написал батник который ищет путь к файлу
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