Показать полную графическую версию : [решено] Переименование с проверкой файла (NirCmd)
Помогите, пожалуйста с написанием скрипта
(с использованием NirCmd (http://www.nirsoft.net/utils/nircmd.html))
Завершить процесс ModBusSrv.exe
nircmd.exe killprocess ModBusSrv.exe
Дождаться завершения процесса ModBusSrv.exe
nircmd.exe waitprocess ModBusSrv.exe
Переименовать файл log.dat в log_dd_mm_yyyy.dat
nircmd.exe execmd ren "log.dat" "log_~$currdate.dd_MM_yyyy$.dat"
Проверить наличие файла log_dd_mm_yyyy.dat
nircmd.exe execmd if exist "log_~$currdate.dd_MM_yyyy$.dat"
если есть запустить ModBusSrv.exe
start "" /d "%~dp0" /b "%~dp0ModBusSrv.exe"
если нет п.1-3
Запись результата работы скрипта в >"%~dp0ren_log.log"
Exit
ModBusSrv.exe – сервер
log.dat – база данных(создается и пишется сервером)
что-то в последней строке nircmd не наблюдаю. Да, сарказм. А без nircmd лишат какой-то лицензии или работы?
lSVl,
в этой ветке никто никого не обязывает использовать nircmd, поэтому мой вопрос открыт, а именно: Можно решить задачу без использования (или почти без использования) nircmd?
И да. В смысле при ответе - да, задачу и условие в студию.
alpap, На NirCmd пал выбор из-за переменной ~$currdate.TimeFormat$, можно и с частичным использованием…
Есть сервер ModBusSrv.exe, который в процессе своей работы создает и пишет базу log.dat. Со временем log.dat разрастается до огромных размеров… Необходимо раз в месяц «резать» базу. Задача написать скрипт который
Завершает процесс ModBusSrv.exe
Ждет завершения процесса ModBusSrv.exe
Переименовывает log.dat в log_dd_mm_yyyy.dat
Проверяет наличие файла log_dd_mm_yyyy.dat
Запускает ModBusSrv.exe
Запись результата работы скрипта в >"%~dp0ren_log.log"
@echo off
"%~dp0cmdow.exe" @ /HID
:no
nircmd.exe killprocess ModBusSrv.exe
nircmd.exe waitprocess ModBusSrv.exe
nircmd.exe execmd ren "log.dat" "log_~$currdate.dd_MM_yyyy$.dat"
nircmd.exe wait 3000
nircmd.exe execmd if not exist "log_~$currdate.dd_MM_yyyy$.dat" goto :no
start "" /d "%~dp0" /b "%~dp0ModBusSrv.exe"
exit
Скрипт запускается планировщиком задач.
Так работает, но хочется более правильного решения, и запись результата работы скрипта в >"%~dp0ren_log.log"
Patroklos
05-02-2018, 11:31
Можно получить дату и нативными средствами. Пример:
FOR /F "tokens=2 delims==." %%d in ('WMIC OS GET LOCALDATETIME /VALUE') DO SET "@Tdate=%%d"
set TDStamp=%@Tdate:~0,4%-%@Tdate:~4,2%-%@Tdate:~6,2%_%@Tdate:~8,2%-%@Tdate:~10,2%-%@Tdate:~12,2%
А это ещё примеры
@echo off
FOR /F "tokens=2 delims==." %%d in ('WMIC OS GET LOCALDATETIME /VALUE') DO SET "@Tdate=%%d"
Set "var0=%@Tdate:~0,4%"
Set "var1=%@Tdate:~4,2%"
Set "var2=%@Tdate:~6,2%"
Set "var3=%@Tdate:~8,2%"
Set "var4=%@Tdate:~10,2%"
Set "var5=%@Tdate:~12,2%"
echo all=%@Tdate%
echo var0=%var0%
echo var1=%var1%
echo var2=%var2%
echo var3=%var3%
echo var4=%var4%
echo var5=%var5%
echo.
echo example0=%var0%-%var1%-%var2%_%var3%-%var4%-%var5%
echo.
echo example1=[%@Tdate:~0,4%-%@Tdate:~4,2%-%@Tdate:~6,2%]_[%@Tdate:~8,2%-%@Tdate:~10,2%-%@Tdate:~12,2%]
echo.
echo example2=[%@Tdate:~0,4%]-[%@Tdate:~4,2%]-[%@Tdate:~6,2%]_[%@Tdate:~8,2%]-[%@Tdate:~10,2%]-[%@Tdate:~12,2%]
echo.
echo example3=[%@Tdate:~0,4%%@Tdate:~4,2%%@Tdate:~6,2%]_[%@Tdate:~8,2%%@Tdate:~10,2%%@Tdate:~12,2%]
echo.
echo example4=[%@Tdate:~0,4%_%@Tdate:~4,2%_%@Tdate:~6,2%]_[%@Tdate:~8,2%_%@Tdate:~10,2%_%@Tdate:~12,2%]
echo.
echo example5=%@Tdate:~0,4%_%@Tdate:~4,2%_%@Tdate:~6,2%_%@Tdate:~8,2%_%@Tdate:~10,2%_%@Tdate:~12,2%
echo.
echo example6=%@Tdate:~0,4%_%@Tdate:~4,2%_%@Tdate:~6,2%~%@Tdate:~8,2%_%@Tdate:~10,2%_%@Tdate:~12,2%
echo.
echo example7=[%@Tdate:~0,4%~%@Tdate:~4,2%~%@Tdate:~6,2%]~[%@Tdate:~8,2%~%@Tdate:~10,2%~%@Tdate:~12,2%]
echo.
echo example8=%@Tdate:~0,4%~%@Tdate:~4,2%~%@Tdate:~6,2%_%@Tdate:~8,2%~%@Tdate:~10,2%~%@Tdate:~12,2%
echo.
>nul pause
2018-01-24_16-11-12
[2018][01][24][16][11][12]
[20180124][161112]
20180124161112
Подскажите, пожалуйста где ошибка?
for %%x in (nircmd.exe clipboard set ~$currdate.dd_MM_yyyy$) do ren "%~dp0log.dat" "log_%%x.dat"
Petya V4sechkin
05-02-2018, 19:46
lSVl, а что вы, собственно, хотите сделать?
В данном случае переименовать файл
nircmd.exe clipboard set ~$currdate.dd_MM_yyyy$
05_02_2018
@echo off
"%~dp0cmdow.exe" @ /HID
FOR /F "tokens=2 delims==." %%d in ('WMIC OS GET LOCALDATETIME /VALUE') DO SET "@Tdate=%%d"
Set "var0=%@Tdate:~0,4%"
Set "var1=%@Tdate:~4,2%"
Set "var2=%@Tdate:~6,2%"
Set "var3=%@Tdate:~8,2%"
Set "var4=%@Tdate:~10,2%"
Set "var5=%@Tdate:~12,2%"
Set "srv=%~dp0ModBusSrv.exe"
Set "log=%~dp0log.dat"
@echo >"%~dp0ren_log.log"
nircmd.exe killprocess "%srv%"
nircmd.exe waitprocess "%srv%"
@echo %srv% остановлен %var2%.%var1%.%var0% %var3%:%var4%:%var5%>>"%~dp0ren_log.log"
if exist "%log%" ren "%log%" "log_%var2%_%var1%_%var0%.dat"
@echo %log% переименован %var2%.%var1%.%var0% %var3%:%var4%:%var5%>>"%~dp0ren_log.log"
nircmd.exe wait 3000
nircmd.exe execmd "%srv%"
@echo %srv% запущен %var2%.%var1%.%var0% %var3%:%var4%:%var5%>>"%~dp0ren_log.log"
exit
Не правильно записывается время
ђҐ¦Ё¬ ўлў®¤* Є®¬**¤ ** нЄа** (ECHO) ®вЄ«озҐ*.
G:\Work\ModBusSrv.exe остановлен 05.02.2018 21:05:19
G:\Work\log.dat переименован 05.02.2018 21:05:19
G:\Work\ModBusSrv.exe запущен 05.02.2018 21:05:19
Подскажите пожалуйста как исправить
Patroklos
05-02-2018, 22:31
Я не настоящий сварщик поэтому запись в лог не осилил. Но примерно то что тебе нужно набросал.
Смотри файлы в аттаче. Один приспособлен для тестов и проверяет обычный вин блокнот. Второй боевой.
Не забывай про тесты и бэкапы!
@echo off
>nul chcp 65001
cd /d "%~dp0"
rem nice script без coolest nircmd
rem Получим число и время и поместим в переменную
FOR /F "tokens=2 delims==." %%d in ('WMIC OS GET LOCALDATETIME /VALUE') DO SET "@Tdate=%%d"
rem 1 Завершить процесс ModBusSrv.exe
taskkill /im ModBusSrv.exe
rem 2 Ждём и проверяем работает ли аппликация
:Jdem
timeout /t 30 >nul
tasklist /FI "IMAGENAME eq ModBusSrv.exe" 2>NUL | find /I /N "ModBusSrv.exe">NUL
if "%ERRORLEVEL%"=="0" echo Program still running & goto Jdem
rem 3 Переименовать файл log.dat в log_dd_mm_yyyy.dat
ren log.dat log_%@Tdate:~0,4%_%@Tdate:~4,2%_%@Tdate:~6,2%_%@Tdate:~8,2%_%@Tdate:~10,2%_%@Tdate:~12,2%.dat
rem 4 Проверить наличие файла log_dd_mm_yyyy.dat
if not exist log_%@Tdate:~0,4%_%@Tdate:~4,2%_%@Tdate:~6,2%_%@Tdate:~8,2%_%@Tdate:~10,2%_%@Tdate:~12,2%.dat (
cls & color 40 & echo Log File Missing!!! & pause >nul ) else (
rem если есть запустить ModBusSrv.exe
start "" ModBusSrv.exe )
pause >nul
Patroklos
05-02-2018, 22:33
аттач
Patroklos
05-02-2018, 22:38
Не правильно записывается время
ђҐ¦Ё¬ ўлў®¤* Є®¬**¤ ** нЄа** (ECHO) ®вЄ«озҐ*. »
Судя по кракозябрам ты редактируешь батники в виндовс блокноте.
Установи себе notepad++ и редактируй в нём. В случае моих батников сохраняй их в utf-8.
В notepad++ кодировка видна в самом низу с правой стороны.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.