Смотрите видео ниже, чтобы узнать, как установить наш сайт в качестве веб-приложения на домашнем экране.
Примечание: Эта возможность может быть недоступна в некоторых браузерах.
Чтобы настроить батник (batch file) для выполнения копирования каждые 30 минут, можно использовать встроенную командуПоправь батник так, чтобы копирование происходило каждые 30 минут
timeout
или ping
для создания паузы. Вот пример того, как можно это сделать:@echo off
:loop
rem Здесь укажите команду для копирования файлов
xcopy "C:\путь\к\исходной\папке\*" "D:\путь\к\целевой\папке\" /E /I /Y
rem Пауза на 30 минут (1800 секунд)
timeout /t 1800
rem Возврат к началу цикла
goto loop
@echo off
- отключает вывод команд в окне консоли.:loop
- метка, к которой мы можем вернуться.xcopy
- команда для копирования файлов. Замените пути на ваши.*
- копирует все файлы./E
- копирует все подкаталоги, включая пустые./I
- если целевая папка не существует, создаёт её./Y
- подавляет запрос на подтверждение перезаписи файлов.timeout /t 1800
- делает паузу на 1800 секунд (30 минут).goto loop
- возвращает выполнение к метке :loop
, начиная процесс заново.@echo off
setlocal enabledelayedexpansion
:: Установите путь к Xenia
set "XENIA_PATH=G:\Soft\XeniaCanary\xenia_canary.exe"
set "source=G:\Soft\XeniaCanary\content"
set "destination=D:\Saves\XBOX360"
set "process_name=xenia_canary.exe"
:: Ожидание ручного запуска Xenia
echo Пожалуйста, запустите Xenia вручную.
:waitForXenia
tasklist /FI "IMAGENAME eq %process_name%" 2>NUL | find /I /N "%process_name%" >NUL
if "%ERRORLEVEL%"=="0" (
echo Xenia запущена. Начинаем мониторинг...
goto monitorXenia
) else (
timeout /t 5 > NUL
goto waitForXenia
)
:monitorXenia
:: Мониторинг Xenia
:checkXenia
tasklist /FI "IMAGENAME eq %process_name%" 2>NUL | find /I /N "%process_name%" >NUL
if "%ERRORLEVEL%"=="0" (
echo Xenia работает. Ожидание...
timeout /t 10 > NUL
goto checkXenia
) else (
echo Xenia закрыта. Перезапуск...
start "" "%XENIA_PATH%"
timeout /t 10 > NUL
goto checkXenia
)
:: Копирование всех папок
for /d %%D in ("%source%\*") do (
set "folderName=%%~nxD"
set "shortName=!folderName:~0,8!" REM Получаем первые 8 символов имени папки
set "destFolder=!shortName! !folderName:~9!" REM Остальная часть имени после первых 8 символов
set "destPath=%destination%\!destFolder!" REM Формируем путь назначения
rem Копируем папку, если она существует в каталоге назначения
if exist "!destPath!" (
robocopy "%%D" "!destPath!" /E /COPY:DAT /MINAGE:1 /XD "Thumbs.db" /R:0 /W:0
)
)
endlocal
Для того чтобы ваш батник выполнялCMD/BATCH:@echo off setlocal enabledelayedexpansion :: Установите путь к Xenia set "XENIA_PATH=G:\Soft\XeniaCanary\xenia_canary.exe" set "source=G:\Soft\XeniaCanary\content" set "destination=D:\Saves\XBOX360" set "process_name=xenia_canary.exe" :: Ожидание ручного запуска Xenia echo Пожалуйста, запустите Xenia вручную. :waitForXenia tasklist /FI "IMAGENAME eq %process_name%" 2>NUL | find /I /N "%process_name%" >NUL if "%ERRORLEVEL%"=="0" ( echo Xenia запущена. Начинаем мониторинг... goto monitorXenia ) else ( timeout /t 5 > NUL goto waitForXenia ) :monitorXenia :: Мониторинг Xenia :checkXenia tasklist /FI "IMAGENAME eq %process_name%" 2>NUL | find /I /N "%process_name%" >NUL if "%ERRORLEVEL%"=="0" ( echo Xenia работает. Ожидание... timeout /t 10 > NUL goto checkXenia ) else ( echo Xenia закрыта. Перезапуск... start "" "%XENIA_PATH%" timeout /t 10 > NUL goto checkXenia ) :: Копирование всех папок for /d %%D in ("%source%\*") do ( set "folderName=%%~nxD" set "shortName=!folderName:~0,8!" REM Получаем первые 8 символов имени папки set "destFolder=!shortName! !folderName:~9!" REM Остальная часть имени после первых 8 символов set "destPath=%destination%\!destFolder!" REM Формируем путь назначения rem Копируем папку, если она существует в каталоге назначения if exist "!destPath!" ( robocopy "%%D" "!destPath!" /E /COPY:DAT /MINAGE:1 /XD "Thumbs.db" /R:0 /W:0 ) ) endlocal
Поправь код батника так, чтобы robocopy выполнялся каждые 30 минут.
robocopy
каждые 30 минут, вам нужно внести некоторые изменения в код. Вместо того чтобы сразу копировать папки, вы можете добавить цикл, который будет повторяться каждые 30 минут. Вот исправленный код:@echo off
setlocal enabledelayedexpansion
:: Установите путь к Xenia
set "XENIA_PATH=G:\Soft\XeniaCanary\xenia_canary.exe"
set "source=G:\Soft\XeniaCanary\content"
set "destination=D:\Saves\XBOX360"
set "process_name=xenia_canary.exe"
:: Ожидание ручного запуска Xenia
echo Пожалуйста, запустите Xenia вручную.
:waitForXenia
tasklist /FI "IMAGENAME eq %process_name%" 2>NUL | find /I /N "%process_name%" >NUL
if "%ERRORLEVEL%"=="0" (
echo Xenia запущена. Начинаем мониторинг...
goto monitorXenia
) else (
timeout /t 5 > NUL
goto waitForXenia
)
:monitorXenia
:: Мониторинг Xenia
:checkXenia
tasklist /FI "IMAGENAME eq %process_name%" 2>NUL | find /I /N "%process_name%" >NUL
if "%ERRORLEVEL%"=="0" (
echo Xenia работает. Ожидание...
timeout /t 10 > NUL
goto checkXenia
) else (
echo Xenia закрыта. Перезапуск...
start "" "%XENIA_PATH%"
timeout /t 10 > NUL
goto checkXenia
)
:: Копирование всех папок каждые 30 минут
:copyFolders
for /d %%D in ("%source%\*") do (
set "folderName=%%~nxD"
set "shortName=!folderName:~0,8!" REM Получаем первые 8 символов имени папки
set "destFolder=!shortName! !folderName:~9!" REM Остальная часть имени после первых 8 символов
set "destPath=%destination%\!destFolder!" REM Формируем путь назначения
rem Копируем папку, если она существует в каталоге назначения
if exist "!destPath!" (
robocopy "%%D" "!destPath!" /E /COPY:DAT /MINAGE:1 /XD "Thumbs.db" /R:0 /W:0
)
)
echo Ожидание 30 минут перед следующим выполнением...
timeout /t 1800 > NUL :: 1800 секунд = 30 минут
goto copyFolders
endlocal
:copyFolders
, где происходит выполнение robocopy
.timeout
для ожидания: После выполнения robocopy
добавлена команда timeout /t 1800
, которая заставляет скрипт ждать 30 минут (1800 секунд) перед следующим выполнением.:copyFolders
для повторения процесса.robocopy
. Если у вас есть дополнительные вопросы или нужно что-то уточнить, дайте знать!@echo off
setlocal enabledelayedexpansion
:: Установите путь к Xenia
set "XENIA_PATH=G:\Soft\XeniaCanary\xenia_canary.exe"
set "source=G:\Soft\XeniaCanary\content"
set "destination=D:\Saves\XBOX360"
set "process_name=xenia_canary.exe"
:: Ожидание ручного запуска Xenia
echo Пожалуйста, запустите Xenia вручную.
:waitForXenia
tasklist /FI "IMAGENAME eq %process_name%" 2>NUL | find /I /N "%process_name%" >NUL
if "%ERRORLEVEL%"=="0" (
echo Xenia запущена. Начинаем мониторинг...
goto monitorXenia
) else (
timeout /t 5 > NUL
goto waitForXenia
)
:monitorXenia
:: Мониторинг Xenia
:checkXenia
tasklist /FI "IMAGENAME eq %process_name%" 2>NUL | find /I /N "%process_name%" >NUL
if "%ERRORLEVEL%"=="0" (
echo Xenia работает. Ожидание...
timeout /t 10 > NUL
goto checkXenia
) else (
echo Xenia закрыта. Перезапуск...
start "" "%XENIA_PATH%"
timeout /t 10 > NUL
goto checkXenia
)
:: Копирование всех папок каждые 30 минут
:copyFolders
for /d %%D in ("%source%\*") do (
set "folderName=%%~nxD"
set "shortName=!folderName:~0,8!" REM Получаем первые 8 символов имени папки
set "destFolder=!shortName! !folderName:~9!" REM Остальная часть имени после первых 8 символов
set "destPath=%destination%\!destFolder!" REM Формируем путь назначения
rem Копируем папку, если она существует в каталоге назначения
if exist "!destPath!" (
robocopy "%%D" "!destPath!" /E /COPY:DAT /MINAGE:1 /XD "Thumbs.db" /R:0 /W:0
)
)
echo Ожидание 30 минут перед следующим выполнением...
timeout /t 1800 > NUL :: 1800 секунд = 30 минут
goto copyFolders
endlocal
Чтобы добавить скрытый запуск в фоновом режиме и убрать вывод командCMD/BATCH:@echo off setlocal enabledelayedexpansion :: Установите путь к Xenia set "XENIA_PATH=G:\Soft\XeniaCanary\xenia_canary.exe" set "source=G:\Soft\XeniaCanary\content" set "destination=D:\Saves\XBOX360" set "process_name=xenia_canary.exe" :: Ожидание ручного запуска Xenia echo Пожалуйста, запустите Xenia вручную. :waitForXenia tasklist /FI "IMAGENAME eq %process_name%" 2>NUL | find /I /N "%process_name%" >NUL if "%ERRORLEVEL%"=="0" ( echo Xenia запущена. Начинаем мониторинг... goto monitorXenia ) else ( timeout /t 5 > NUL goto waitForXenia ) :monitorXenia :: Мониторинг Xenia :checkXenia tasklist /FI "IMAGENAME eq %process_name%" 2>NUL | find /I /N "%process_name%" >NUL if "%ERRORLEVEL%"=="0" ( echo Xenia работает. Ожидание... timeout /t 10 > NUL goto checkXenia ) else ( echo Xenia закрыта. Перезапуск... start "" "%XENIA_PATH%" timeout /t 10 > NUL goto checkXenia ) :: Копирование всех папок каждые 30 минут :copyFolders for /d %%D in ("%source%\*") do ( set "folderName=%%~nxD" set "shortName=!folderName:~0,8!" REM Получаем первые 8 символов имени папки set "destFolder=!shortName! !folderName:~9!" REM Остальная часть имени после первых 8 символов set "destPath=%destination%\!destFolder!" REM Формируем путь назначения rem Копируем папку, если она существует в каталоге назначения if exist "!destPath!" ( robocopy "%%D" "!destPath!" /E /COPY:DAT /MINAGE:1 /XD "Thumbs.db" /R:0 /W:0 ) ) echo Ожидание 30 минут перед следующим выполнением... timeout /t 1800 > NUL :: 1800 секунд = 30 минут goto copyFolders endlocal
Добавь в этот батник скрытый запуск в фоновом режиме без ярлыка и убери вывод echo
echo
, вам нужно внести несколько изменений в ваш батник. Вот обновленная версия:@echo off
setlocal enabledelayedexpansion
:: Установите путь к Xenia
set "XENIA_PATH=G:\Soft\XeniaCanary\xenia_canary.exe"
set "source=G:\Soft\XeniaCanary\content"
set "destination=D:\Saves\XBOX360"
set "process_name=xenia_canary.exe"
:: Ожидание ручного запуска Xenia
start /B "" cmd /c "echo Пожалуйста, запустите Xenia вручную."
:waitForXenia
tasklist /FI "IMAGENAME eq %process_name%" 2>NUL | find /I /N "%process_name%" >NUL
if "%ERRORLEVEL%"=="0" (
goto monitorXenia
) else (
timeout /t 5 > NUL
goto waitForXenia
)
:monitorXenia
:: Мониторинг Xenia
:checkXenia
tasklist /FI "IMAGENAME eq %process_name%" 2>NUL | find /I /N "%process_name%" >NUL
if "%ERRORLEVEL%"=="0" (
timeout /t 10 > NUL
goto checkXenia
) else (
start "" "%XENIA_PATH%"
timeout /t 10 > NUL
goto checkXenia
)
:: Копирование всех папок каждые 30 минут
:copyFolders
for /d %%D in ("%source%\*") do (
set "folderName=%%~nxD"
set "shortName=!folderName:~0,8!" REM Получаем первые 8 символов имени папки
set "destFolder=!shortName! !folderName:~9!" REM Остальная часть имени после первых 8 символов
set "destPath=%destination%\!destFolder!" REM Формируем путь назначения
rem Копируем папку, если она существует в каталоге назначения
if exist "!destPath!" (
robocopy "%%D" "!destPath!" /E /COPY:DAT /MINAGE:1 /XD "Thumbs.db" /R:0 /W:0
)
)
timeout /t 1800 > NUL :: 1800 секунд = 30 минут
goto copyFolders
endlocal
start /B
для запуска Xenia в фоновом режиме. Это позволяет избежать появления нового окна консоли.echo
: Все команды echo
были удалены или заменены на cmd /c
для запуска в фоновом режиме. timeout /t ... > NUL
, чтобы подавить вывод.robocopy
, так как для копирования файлов могут потребоваться соответствующие разрешения.echo
, чтобы видеть, что происходит в процессе выполнения.@echo off
setlocal enabledelayedexpansion
:: Установите путь к Xenia
set "XENIA_PATH=G:\Soft\XeniaCanary\xenia_canary.exe"
set "source=G:\Soft\XeniaCanary\content"
set "destination=D:\Saves\XBOX360"
set "process_name=xenia_canary.exe"
:: Ожидание ручного запуска Xenia
start /B "" cmd /c "echo Пожалуйста, запустите Xenia вручную."
:waitForXenia
tasklist /FI "IMAGENAME eq %process_name%" 2>NUL | find /I /N "%process_name%" >NUL
if "%ERRORLEVEL%"=="0" (
goto monitorXenia
) else (
timeout /t 5 > NUL
goto waitForXenia
)
:monitorXenia
:: Мониторинг Xenia
:checkXenia
tasklist /FI "IMAGENAME eq %process_name%" 2>NUL | find /I /N "%process_name%" >NUL
if "%ERRORLEVEL%"=="0" (
timeout /t 10 > NUL
goto checkXenia
) else (
start "" "%XENIA_PATH%"
timeout /t 10 > NUL
goto checkXenia
)
:: Копирование всех папок каждые 30 минут
:copyFolders
for /d %%D in ("%source%\*") do (
set "folderName=%%~nxD"
set "shortName=!folderName:~0,8!" REM Получаем первые 8 символов имени папки
set "destFolder=!shortName! !folderName:~9!" REM Остальная часть имени после первых 8 символов
set "destPath=%destination%\!destFolder!" REM Формируем путь назначения
rem Копируем папку, если она существует в каталоге назначения
if exist "!destPath!" (
robocopy "%%D" "!destPath!" /E /COPY:DAT /MINAGE:1 /XD "Thumbs.db" /R:0 /W:0
)
)
timeout /t 1800 > NUL :: 1800 секунд = 30 минут
goto copyFolders
endlocal
Чтобы скрыть окно консоли при выполнении вашего батника, вы можете использовать несколько подходов. Один из наиболее распространенных способов — это создать ярлык на ваш батник и изменить его свойства. Однако, если вы хотите сделать это программно, можно использовать VBScript для запуска вашего батника в скрытом режиме.CMD/BATCH:@echo off setlocal enabledelayedexpansion :: Установите путь к Xenia set "XENIA_PATH=G:\Soft\XeniaCanary\xenia_canary.exe" set "source=G:\Soft\XeniaCanary\content" set "destination=D:\Saves\XBOX360" set "process_name=xenia_canary.exe" :: Ожидание ручного запуска Xenia start /B "" cmd /c "echo Пожалуйста, запустите Xenia вручную." :waitForXenia tasklist /FI "IMAGENAME eq %process_name%" 2>NUL | find /I /N "%process_name%" >NUL if "%ERRORLEVEL%"=="0" ( goto monitorXenia ) else ( timeout /t 5 > NUL goto waitForXenia ) :monitorXenia :: Мониторинг Xenia :checkXenia tasklist /FI "IMAGENAME eq %process_name%" 2>NUL | find /I /N "%process_name%" >NUL if "%ERRORLEVEL%"=="0" ( timeout /t 10 > NUL goto checkXenia ) else ( start "" "%XENIA_PATH%" timeout /t 10 > NUL goto checkXenia ) :: Копирование всех папок каждые 30 минут :copyFolders for /d %%D in ("%source%\*") do ( set "folderName=%%~nxD" set "shortName=!folderName:~0,8!" REM Получаем первые 8 символов имени папки set "destFolder=!shortName! !folderName:~9!" REM Остальная часть имени после первых 8 символов set "destPath=%destination%\!destFolder!" REM Формируем путь назначения rem Копируем папку, если она существует в каталоге назначения if exist "!destPath!" ( robocopy "%%D" "!destPath!" /E /COPY:DAT /MINAGE:1 /XD "Thumbs.db" /R:0 /W:0 ) ) timeout /t 1800 > NUL :: 1800 секунд = 30 минут goto copyFolders endlocal
Добавь в батник команду, которая скрывает окно консоли с рабочего стола
run_hidden.vbs
.run_hidden.vbs
:vbscript
Set WshShell = CreateObject("WScript.Shell")
WshShell.Run "путь_к_вашему_батнику.bat", 0, False
путь_к_вашему_батнику.bat
на фактический путь к вашему батнику.xenia_script.bat
и находится в папке G:\Soft\XeniaCanary
, ваш VBScript будет выглядеть так:Set WshShell = CreateObject("WScript.Shell")
WshShell.Run "G:\Soft\XeniaCanary\xenia_script.bat", 0, False
run_hidden.vbs
, просто дважды щелкните на этом файле, и ваш батник будет выполняться без отображения консольного окна.Можно ли реализовать выполнение батника без отображения консольного окна непосредственно в батнике? Что-то вроде команды "cmdow @ /HID"?
vbscript
Set WshShell = CreateObject("WScript.Shell")
WshShell.Run "C:\путь\к\вашему\скрипту.bat", 0, False
0
указывает на то, что окно должно быть скрыто.False
означает, что выполнение VBS-скрипта не будет ожидать завершения BAT-файла.cmdow
, как вы упомянули, вам нужно сначала убедиться, что у вас установлена эта утилита. После этого вы можете использовать следующую команду в вашем BAT-файле:bat
cmdow @ /HID
ваш_скрипт_или_команда
cmdow.exe
доступен в PATH или находится в той же папке, что и ваш BAT-файл.script.bat
, который вы хотите запустить без отображения консольного окна. Создайте файл run_hidden.vbs
со следующим содержимым:Set WshShell = CreateObject("WScript.Shell")
WshShell.Run "C:\путь\к\script.bat", 0, False
run_hidden.vbs
, и ваш BAT-файл выполнится без отображения консольного окна.@echo off
setlocal enabledelayedexpansion
:: Установите путь к Xenia
set "XENIA_PATH=G:\Soft\XeniaCanary\xenia_canary.exe"
set "source=G:\Soft\XeniaCanary\content"
set "destination=D:\Saves\XBOX360"
set "process_name=xenia_canary.exe"
:: Ожидание ручного запуска Xenia
start /B "" cmd /c "echo Пожалуйста, запустите Xenia вручную."
:waitForXenia
tasklist /FI "IMAGENAME eq %process_name%" 2>NUL | find /I /N "%process_name%" >NUL
if "%ERRORLEVEL%"=="0" (
goto monitorXenia
) else (
timeout /t 5 > NUL
goto waitForXenia
)
:monitorXenia
:: Мониторинг Xenia
:checkXenia
tasklist /FI "IMAGENAME eq %process_name%" 2>NUL | find /I /N "%process_name%" >NUL
if "%ERRORLEVEL%"=="0" (
timeout /t 10 > NUL
goto checkXenia
) else (
start "" "%XENIA_PATH%"
timeout /t 10 > NUL
goto checkXenia
)
:: Копирование всех папок каждые 30 минут
:copyFolders
for /d %%D in ("%source%\*") do (
set "folderName=%%~nxD"
set "shortName=!folderName:~0,8!" REM Получаем первые 8 символов имени папки
set "destFolder=!shortName! !folderName:~9!" REM Остальная часть имени после первых 8 символов
set "destPath=%destination%\!destFolder!" REM Формируем путь назначения
rem Копируем папку, если она существует в каталоге назначения
if exist "!destPath!" (
robocopy "%%D" "!destPath!" /E /COPY:DAT /MINAGE:1 /XD "Thumbs.db" /R:0 /W:0
)
)
timeout /t 1800 > NUL :: 1800 секунд = 30 минут
goto copyFolders
endlocal
CMD/BATCH:@echo off setlocal enabledelayedexpansion :: Установите путь к Xenia set "XENIA_PATH=G:\Soft\XeniaCanary\xenia_canary.exe" set "source=G:\Soft\XeniaCanary\content" set "destination=D:\Saves\XBOX360" set "process_name=xenia_canary.exe" :: Ожидание ручного запуска Xenia start /B "" cmd /c "echo Пожалуйста, запустите Xenia вручную." :waitForXenia tasklist /FI "IMAGENAME eq %process_name%" 2>NUL | find /I /N "%process_name%" >NUL if "%ERRORLEVEL%"=="0" ( goto monitorXenia ) else ( timeout /t 5 > NUL goto waitForXenia ) :monitorXenia :: Мониторинг Xenia :checkXenia tasklist /FI "IMAGENAME eq %process_name%" 2>NUL | find /I /N "%process_name%" >NUL if "%ERRORLEVEL%"=="0" ( timeout /t 10 > NUL goto checkXenia ) else ( start "" "%XENIA_PATH%" timeout /t 10 > NUL goto checkXenia ) :: Копирование всех папок каждые 30 минут :copyFolders for /d %%D in ("%source%\*") do ( set "folderName=%%~nxD" set "shortName=!folderName:~0,8!" REM Получаем первые 8 символов имени папки set "destFolder=!shortName! !folderName:~9!" REM Остальная часть имени после первых 8 символов set "destPath=%destination%\!destFolder!" REM Формируем путь назначения rem Копируем папку, если она существует в каталоге назначения if exist "!destPath!" ( robocopy "%%D" "!destPath!" /E /COPY:DAT /MINAGE:1 /XD "Thumbs.db" /R:0 /W:0 ) ) timeout /t 1800 > NUL :: 1800 секунд = 30 минут goto copyFolders endlocal
Перепиши код батника с использованием nircmd exec hide "D:\Saves\XBOX360\Autobackup saves.bat" /savelangfile вместо start /B "" cmd /c "echo Пожалуйста, запустите Xenia вручную."
nircmd exec hide
вместо команды start /B
. Я также исправил некоторые символы и убрал лишние пробелы для улучшения читаемости.@echo off
setlocal enabledelayedexpansion
:: Установите путь к Xenia
set "XENIA_PATH=G:\Soft\XeniaCanary\xenia_canary.exe"
set "source=G:\Soft\XeniaCanary\content"
set "destination=D:\Saves\XBOX360"
set "process_name=xenia_canary.exe"
:: Ожидание ручного запуска Xenia
nircmd exec hide "D:\Saves\XBOX360\Autobackup saves.bat" /savelangfile
:waitForXenia
tasklist /FI "IMAGENAME eq %process_name%" 2>NUL | find /I /N "%process_name%" >NUL
if "%ERRORLEVEL%"=="0" (
goto monitorXenia
) else (
timeout /t 5 > NUL
goto waitForXenia
)
:monitorXenia
:: Мониторинг Xenia
:checkXenia
tasklist /FI "IMAGENAME eq %process_name%" 2>NUL | find /I /N "%process_name%" >NUL
if "%ERRORLEVEL%"=="0" (
timeout /t 10 > NUL
goto checkXenia
) else (
start "" "%XENIA_PATH%"
timeout /t 10 > NUL
goto checkXenia
)
:: Копирование всех папок каждые 30 минут
:copyFolders
for /d %%D in ("%source%\*") do (
set "folderName=%%~nxD"
set "shortName=!folderName:~0,8!" REM Получаем первые 8 символов имени папки
set "destFolder=!shortName! !folderName:~9!" REM Остальная часть имени после первых 8 символов
set "destPath=%destination%\!destFolder!" REM Формируем путь назначения
rem Копируем папку, если она существует в каталоге назначения
if exist "!destPath!" (
robocopy "%%D" "!destPath!" /E /COPY:DAT /MINAGE:1 /XD "Thumbs.db" /R:0 /W:0
)
)
timeout /t 1800 > NUL :: 1800 секунд = 30 минут
goto copyFolders
endlocal
nircmd exec hide
: Я заменил команду start /B
на nircmd exec hide
, чтобы скрыть выполнение скрипта, который запрашивает ручной запуск Xenia. Это позволяет вашему скрипту работать более аккуратно, без лишнего окна командной строки.robocopy
или xcopy
?nircmd
? Есть ли другие задачи, которые вы хотите автоматизировать с его помощью?Перепроверь батник на ошибки, он бесконечно запускает процесс xenia_canary.exe
xenia_canary.exe
. Обычно это происходит из-за неправильной логики в самом батнике. xenia_canary.exe
:@echo off
:loop
start "" "C:\Path\To\xenia_canary.exe"
timeout /t 5
goto loop
xenia_canary.exe
указан неправильно, это может привести к тому, что батник будет пытаться запустить несуществующий файл.@echo off
:loop
tasklist /FI "IMAGENAME eq xenia_canary.exe" | find /I "xenia_canary.exe" >nul
if errorlevel 1 (
start "" "C:\Path\To\xenia_canary.exe"
) else (
echo Процесс уже запущен.
)
timeout /t 5
goto loop
xenia_canary.exe
указан правильно.@echo off
setlocal enabledelayedexpansion
:: Установите путь к Xenia
set "XENIA_PATH=G:\Soft\XeniaCanary\xenia_canary.exe"
set "source=G:\Soft\XeniaCanary\content"
set "destination=D:\Saves\XBOX360"
set "process_name=xenia_canary.exe"
:: Ожидание ручного запуска Xenia
nircmd exec hide "D:\Saves\XBOX360\Autobackup saves.bat" /savelangfile
:waitForXenia
tasklist /FI "IMAGENAME eq %process_name%" 2>NUL | find /I /N "%process_name%" >NUL
if "%ERRORLEVEL%"=="0" (
goto monitorXenia
) else (
timeout /t 5 > NUL
goto waitForXenia
)
:monitorXenia
:: Мониторинг Xenia
:checkXenia
tasklist /FI "IMAGENAME eq %process_name%" 2>NUL | find /I /N "%process_name%" >NUL
if "%ERRORLEVEL%"=="0" (
timeout /t 10 > NUL
goto checkXenia
) else (
start "" "%XENIA_PATH%"
timeout /t 10 > NUL
goto checkXenia
)
:: Копирование всех папок каждые 30 минут
:copyFolders
for /d %%D in ("%source%\*") do (
set "folderName=%%~nxD"
set "shortName=!folderName:~0,8!" REM Получаем первые 8 символов имени папки
set "destFolder=!shortName! !folderName:~9!" REM Остальная часть имени после первых 8 символов
set "destPath=%destination%\!destFolder!" REM Формируем путь назначения
rem Копируем папку, если она существует в каталоге назначения
if exist "!destPath!" (
robocopy "%%D" "!destPath!" /E /COPY:DAT /MINAGE:1 /XD "Thumbs.db" /R:0 /W:0
)
)
timeout /t 1800 > NUL :: 1800 секунд = 30 минут
goto copyFolders
endlocal
Какие альтернативы есть утилите nircmd?
ahk
; Пример скрипта для открытия калькулятора
^!c::Run calc.exe ; Ctrl + Alt + C откроет калькулятор
powershell
# Открытие блокнота
Start-Process notepad
batch
@echo off
start notepad.exe
@echo off
setlocal enabledelayedexpansion
:: Установите путь к Xenia
set "XENIA_PATH=G:\Soft\XeniaCanary\xenia_canary.exe"
set "source=G:\Soft\XeniaCanary\content"
set "destination=D:\Saves\XBOX360"
set "process_name=xenia_canary.exe"
:: Ожидание ручного запуска Xenia
nircmd exec hide "D:\Saves\XBOX360\Autobackup saves.bat" /savelangfile
:waitForXenia
tasklist /FI "IMAGENAME eq %process_name%" 2>NUL | find /I /N "%process_name%" >NUL
if "%ERRORLEVEL%"=="0" (
goto monitorXenia
) else (
timeout /t 5 > NUL
goto waitForXenia
)
:monitorXenia
:: Мониторинг Xenia
:checkXenia
tasklist /FI "IMAGENAME eq %process_name%" 2>NUL | find /I /N "%process_name%" >NUL
if "%ERRORLEVEL%"=="0" (
timeout /t 10 > NUL
goto checkXenia
) else (
start "" "%XENIA_PATH%"
timeout /t 10 > NUL
goto checkXenia
)
:: Копирование всех папок каждые 30 минут
:copyFolders
for /d %%D in ("%source%\*") do (
set "folderName=%%~nxD"
set "shortName=!folderName:~0,8!" REM Получаем первые 8 символов имени папки
set "destFolder=!shortName! !folderName:~9!" REM Остальная часть имени после первых 8 символов
set "destPath=%destination%\!destFolder!" REM Формируем путь назначения
rem Копируем папку, если она существует в каталоге назначения
if exist "!destPath!" (
robocopy "%%D" "!destPath!" /E /COPY:DAT /MINAGE:1 /XD "Thumbs.db" /R:0 /W:0
)
)
timeout /t 1800 > NUL :: 1800 секунд = 30 минут
goto copyFolders
endlocal
Ваш код написан на командном языке Windows и содержит несколько частей, которые могут вызывать бесконечный цикл. Давайте разберем его и посмотрим, где могут быть проблемы.Проверь пожалуйста код ниже, по непонятной причине процесс xenia_canary.exe запускается бесконечно
CMD/BATCH:@echo off setlocal enabledelayedexpansion :: Установите путь к Xenia set "XENIA_PATH=G:\Soft\XeniaCanary\xenia_canary.exe" set "source=G:\Soft\XeniaCanary\content" set "destination=D:\Saves\XBOX360" set "process_name=xenia_canary.exe" :: Ожидание ручного запуска Xenia nircmd exec hide "D:\Saves\XBOX360\Autobackup saves.bat" /savelangfile :waitForXenia tasklist /FI "IMAGENAME eq %process_name%" 2>NUL | find /I /N "%process_name%" >NUL if "%ERRORLEVEL%"=="0" ( goto monitorXenia ) else ( timeout /t 5 > NUL goto waitForXenia ) :monitorXenia :: Мониторинг Xenia :checkXenia tasklist /FI "IMAGENAME eq %process_name%" 2>NUL | find /I /N "%process_name%" >NUL if "%ERRORLEVEL%"=="0" ( timeout /t 10 > NUL goto checkXenia ) else ( start "" "%XENIA_PATH%" timeout /t 10 > NUL goto checkXenia ) :: Копирование всех папок каждые 30 минут :copyFolders for /d %%D in ("%source%\*") do ( set "folderName=%%~nxD" set "shortName=!folderName:~0,8!" REM Получаем первые 8 символов имени папки set "destFolder=!shortName! !folderName:~9!" REM Остальная часть имени после первых 8 символов set "destPath=%destination%\!destFolder!" REM Формируем путь назначения rem Копируем папку, если она существует в каталоге назначения if exist "!destPath!" ( robocopy "%%D" "!destPath!" /E /COPY:DAT /MINAGE:1 /XD "Thumbs.db" /R:0 /W:0 ) ) timeout /t 1800 > NUL :: 1800 секунд = 30 минут goto copyFolders endlocal
tasklist
, чтобы проверить, запущен ли процесс.echo
для вывода состояния процесса в файл.batch
echo %date% %time%: Проверка процесса %process_name% >> log.txt
tasklist
и find
:tasklist
возвращает корректный результат. Если find
не находит процесс, это может привести к тому, что Xenia будет перезапускаться бесконечно.xenia_canary.exe
(например, регистр букв).robocopy
не будет выполняться, но это не должно вызывать бесконечный цикл. Тем не менее, убедитесь, что папка назначения существует.batch
if not exist "%destination%" (
mkdir "%destination%"
)
разве утилита прописана в PATCH? Чем менее подробна задача, тем хуже результат, бесконечный цикл, так и задуман?:: Ожидание ручного запуска Xenia nircmd exec hide "D:\Saves\XBOX360\Autobackup saves.bat" /savelangfile