Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Переименование с проверкой файла (NirCmd)

Ответить
Настройки темы
CMD/BAT - [решено] Переименование с проверкой файла (NirCmd)

Новый участник


Сообщения: 45
Благодарности: 4

Профиль | Отправить PM | Цитировать


Изменения
Автор: lSVl
Дата: 04-02-2018
Помогите, пожалуйста с написанием скрипта
(с использованием NirCmd)
  1. Завершить процесс ModBusSrv.exe
    Код: Выделить весь код
    nircmd.exe killprocess ModBusSrv.exe
  2. Дождаться завершения процесса ModBusSrv.exe
    Код: Выделить весь код
    nircmd.exe waitprocess ModBusSrv.exe
  3. Переименовать файл log.dat в log_dd_mm_yyyy.dat
    Код: Выделить весь код
    nircmd.exe execmd ren "log.dat" "log_~$currdate.dd_MM_yyyy$.dat"
  4. Проверить наличие файла 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
  5. Запись результата работы скрипта в >"%~dp0ren_log.log"
  6. Exit
ModBusSrv.exe – сервер
log.dat – база данных(создается и пишется сервером)

Отправлено: 14:51, 04-02-2018

 

Ветеран


Сообщения: 1274
Благодарности: 564

Профиль | Отправить PM | Цитировать


что-то в последней строке nircmd не наблюдаю. Да, сарказм. А без nircmd лишат какой-то лицензии или работы?

Отправлено: 18:39, 04-02-2018 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 45
Благодарности: 4

Профиль | Отправить PM | Цитировать


alpap, без флуда никак?

Отправлено: 19:22, 04-02-2018 | #3


Ветеран


Сообщения: 1274
Благодарности: 564

Профиль | Отправить PM | Цитировать


lSVl,
в этой ветке никто никого не обязывает использовать nircmd, поэтому мой вопрос открыт, а именно: Можно решить задачу без использования (или почти без использования) nircmd?
И да. В смысле при ответе - да, задачу и условие в студию.

Отправлено: 22:54, 04-02-2018 | #4


Новый участник


Сообщения: 45
Благодарности: 4

Профиль | Отправить PM | Цитировать


alpap, На NirCmd пал выбор из-за переменной ~$currdate.TimeFormat$, можно и с частичным использованием…
Есть сервер ModBusSrv.exe, который в процессе своей работы создает и пишет базу log.dat. Со временем log.dat разрастается до огромных размеров… Необходимо раз в месяц «резать» базу. Задача написать скрипт который
  1. Завершает процесс ModBusSrv.exe
  2. Ждет завершения процесса ModBusSrv.exe
  3. Переименовывает log.dat в log_dd_mm_yyyy.dat
  4. Проверяет наличие файла log_dd_mm_yyyy.dat
  5. Запускает ModBusSrv.exe
  6. Запись результата работы скрипта в >"%~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"

Последний раз редактировалось lSVl, 05-02-2018 в 10:58.

Это сообщение посчитали полезным следующие участники:

Отправлено: 10:15, 05-02-2018 | #5


Пользователь


Сообщения: 87
Благодарности: 4

Профиль | Отправить PM | Цитировать


Можно получить дату и нативными средствами. Пример:
Код: Выделить весь код
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
Это сообщение посчитали полезным следующие участники:

Отправлено: 11:31, 05-02-2018 | #6


Новый участник


Сообщения: 45
Благодарности: 4

Профиль | Отправить PM | Цитировать


Подскажите, пожалуйста где ошибка?
Код: Выделить весь код
for %%x in (nircmd.exe clipboard set ~$currdate.dd_MM_yyyy$) do ren "%~dp0log.dat" "log_%%x.dat"

Отправлено: 17:26, 05-02-2018 | #7



Moderator


Сообщения: 53555
Благодарности: 15533

Профиль | Отправить PM | Цитировать


lSVl, а что вы, собственно, хотите сделать?

Отправлено: 19:46, 05-02-2018 | #8


Новый участник


Сообщения: 45
Благодарности: 4

Профиль | Отправить PM | Цитировать


В данном случае переименовать файл
Код: Выделить весь код
nircmd.exe clipboard set ~$currdate.dd_MM_yyyy$
05_02_2018

Отправлено: 20:06, 05-02-2018 | #9


Новый участник


Сообщения: 45
Благодарности: 4

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
@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
Подскажите пожалуйста как исправить

Отправлено: 22:15, 05-02-2018 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Переименование с проверкой файла (NirCmd)

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Интерфейс - [решено] Переименование файла mishkinstvo Microsoft Windows 2000/XP 5 10-12-2021 22:08
CMD/BAT - Организация вывода файла на экран с предварительной проверкой. besgranichni@vk Скриптовые языки администрирования Windows 8 18-12-2014 16:22
CMD/BAT - [решено] копирование файла во все подкаталоги каталога с проверкой yanus74 Скриптовые языки администрирования Windows 2 17-08-2014 09:40
CMD/BAT - [решено] Переименование файла по данным из самого файла dark-------13 Скриптовые языки администрирования Windows 11 21-04-2011 18:08
VBS/WSH/JS - [решено] Скрипт обновления файла с проверкой по дате изменения. CtrlD Скриптовые языки администрирования Windows 2 17-07-2010 10:45




 
Переход