gpt4 book ai didi

c - 在 Windows 平台上以 C 编程语言在开始和结束时间之外运行脚本

转载 作者:行者123 更新时间:2023-12-04 12:00:12 26 4
gpt4 key购买 nike

简介

我有一个脚本,当 children 登录到他们的计算机作为我的家庭域的一部分时,我正在创建该脚本。该脚本将检查当前时间,然后如果它在开始和结束时间之外,它将自动关闭计算机。

C 脚本

我目前的脚本如下;

#include <time.h>
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>

int main(int argc, char *argv[])
{
int i;
char current_time[100];
char *start;
char *finish;

if(argc>=2)
{
for(i=0;i<argc;i++)
{

if(strcmp(argv[i],"-s") == 0)
{
start = argv[i+1];
}
else if (strcmp(argv[i],"-f") == 0)
{
finish = argv[i+1];
}

}
}

time_t curr_time_value = time( NULL );
strftime(current_time, 100, "%T", localtime(&curr_time_value));

if(current_time < start && current_time > finish)
{
system("shutdown /s /t 0");
}
else
{
printf("%s\n", current_time);
}

return 0;
}

问题

我遇到问题的脚本部分是时间比较,我想做的是;

if(current_time < start && current_time > finish)
{
system("shutdown /s /t 0");
}

我知道脚本是一个字符串,据我所知,您不能以这种方式比较两个字符串,如小于或大于。但我需要做的是将这些值更改为 int 以便使用这种类型的比较。

我正在寻找有关如何继续使这个比较脚本起作用的建议。我将在未来添加一个 while 循环来重复触发脚本以确保计算机关闭。

我尝试过的

我已经尝试过其他脚本,例如 powershell 和带有计划任务的批处理文件,但它并不可靠。 children 只是启动他们的机器,然后重新登录。因此,考虑到我的空闲时间很少,我需要一种更简单的方法,这让我想到了这里。

让-弗朗索瓦·法 bool ·菲克斯

time_t curr_time_value = time( NULL ); 
strftime(current_time, 100, "%H:%M", localtime(&curr_time_value));

if(strcmp(current_time,start) < 0 || strcmp(current_time,finish) > 0)
{
system("shutdown /s /t 0");
}

最佳答案

您可以为字符串使用“伪 ISO”格式:

strftime(current_time, 100, "%H:%M", localtime(&curr_time_value));

生成类似 20:5909:00 的内容(零填充)(注意:我无法使 %T 工作在我的 Windows 机器上,它只生成一个空字符串,此外我假设你不需要秒数)

在这种情况下,如果您的参数遵循该格式,则字符串比较工作正常但您必须修复您的条件:

  • 它必须使用 || 因为关闭会在任何一种情况下发生,而不是同时发生
  • 它必须使用 strcmp 否则您正在比较指针 并且行为未定义/不是您想要的

修复:

if (strcmp(current_time,start) < 0 || strcmp(current_time,finish) > 0)

关于c - 在 Windows 平台上以 C 编程语言在开始和结束时间之外运行脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49118383/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com