二九小说网

繁体版 简体版
二九小说网 > 筑梦非凡-面对不公勇往直前 > 第18章 用AI解决工作中的难题

第18章 用AI解决工作中的难题

章节错误,点此举报(免注册),举报后维护人员会在两分钟内校正章节内容,请耐心等待,并刷新页面。

编程和设计人员最不喜欢遇到的老板是怎样的呢?那就是不断变更需求的老板。我最近就遇到了这样一个难题:新的需求要求程序改动超过一半,工作量巨大,而且还要求在3天内完成修改。

过去,这几乎是一个不可能完成的任务。

但现在,情况有了翻天覆地的变化。我利用AI辅助编程,仅用一晚上就搞定了。编写程序是一项非常专业的工作。我接下来将以一个比较简单的Windows脚本编程为例,来展示如何解决一个既不太大也不太小的问题。

有了AI的帮助,即使你的专业知识非常一般,甚至是完全没有,也能够完成这样的任务。

这也是我今天在工作中碰到的一个难题。新的硬件设计中,我们增加了一块电脑板,这块电脑板能够支持远程登录。这样,我就可以在这块电脑板上编写程序,然后将编译好的程序直接刷入我们现场使用的控制板中。

然而,问题来了:一旦接上这块电脑板,我们的控制板就会随机性地重启!这块电脑板是设计成开机自启动的,这样做的好处是,我可以在异地进行无人值守的登录,无需亲自前往现场出差,这无疑是一个降低人员出差成本的好办法。

因此,我构思了一个解决方案:如果两分钟内我没有登录这块电脑板,它就会自动关机。如果需要再次开启,可以请当地的同事帮忙启动。因为调试机器并不是一直需要进行,只有在增加新功能或修正问题时才必须运行。因此,预留两分钟的时间是完全足够的。这样也不会影响我们控制板的正常运行。

为了实现这个方案,我需要编写一个Windows的shell程序。但是,我对这方面的编程并不是特别擅长。

我记得以前,当我需要写这种程序时,一边查资料一边调试代码,通常需要3到5天才能完成。但现在,我仅用了一个下午就搞定了。

下面,我将详细描述我解决这个问题的方法和过程。对于不感兴趣或者不太喜欢看技术内容的读者,可以选择快速浏览,不必深究细节。如果将来你遇到类似的需求,可以参考我的经验,或者找一个懂计算机的朋友,让他们参考我的教程来帮助你解决问题。

首先,我向AI提出了我的需求。注意提问的技巧,使用自然语言清楚地描述你的要求就可以了。我的目标是什么,我想要实现什么。当然,你也可以选择分步骤、提示性地提问,只是这样可能需要更多的时间和更多的步骤。

我问:

编写一个Windows shell程序,让电脑在开机后2分钟内,如果没有操作,就自动关机,并且要求开机时自动运行此程序。

AI回答:

要实现这个功能,你可以通过编写一个批处理脚本(Batch Script)来实现。这个脚本会在开机时自动运行,等待2分钟,如果用户没有关闭指定的窗口,那么就自动关机。这个过程涉及到几个步骤:

编写批处理脚本:这个脚本会等待2分钟,然后检查特定窗口是否还开着,如果开着就执行关机命令。

设置脚本开机自启动:通过将脚本或其快捷方式放入Windows的"启动"文件夹,或者通过任务计划程序设置开机自启动。

第1步:编写批处理脚本

首先,需要明确你想要关闭的窗口是哪一个,因为批处理脚本需要根据窗口的标题来判断。这里以“记事本”(Notepad)为例。

创建一个新的文本文件,将其命名为AutoShutdown.bat,然后用文本编辑器打开它,输入以下内容:

@echo off

timeout /t 120

tasklist /fi "imagename eq notepad.exe" |find ":" > nul

if errorlevel 1 shutdown /s /f /t 0

这段脚本的意思是:

@echo off:不显示后续执行的命令。

timeout /t 120:等待120秒(2分钟)。

tasklist /fi "imagename eq notepad.exe":查找当前运行的程序中是否有记事本(notepad.exe)。

find ":" > nul:通过查找输出中的":"来判断上一个命令是否有输出。

if errorlevel 1 shutdown /s /f /t 0:如果上一个命令的返回值(errorlevel)不是0(表示没找到记事本),则执行关机操作。

第2步:设置脚本开机自启动

有几种方法可以设置脚本开机自启动,这里介绍通过“启动”文件夹的方法:

按下Win+R键打开运行对话框,输入shell:startup,然后按回车。这会打开“启动”文件夹。

将你的AutoShutdown.bat文件的快捷方式复制到这个文件夹里。

这样,每次开机时,Windows就会自动运行这个脚本。

注意:自动关机可能会导致用户数据丢失,特别是如果用户正在进行未保存的工作时。请确保用户了解这一点,并且这个功能是真正需要的。此外,修改系统行为可能带来意外的后果,所以在实施之前请确保充分测试。

额外说明

在实际应用中,你可能需要根据实际情况调整脚本,特别是tasklist /fi "imagename eq notepad.exe"这一行,其中的notepad.exe应该替换为你实际想要检测的程序的进程名。

如果你想要检测的是某个特定的窗口标题,而不是进程本身,可能需要使用更高级的脚本语言,如PowerShell,或者第三方工具,因为批处理的能力在这方面比较有限。

自动关机的功能可能会对用户造成不便,确保这是你真正需要的功能,并且用户已经被充分告知可能的后果。

如果你想要更复杂的逻辑(比如,在特定条件下取消关机),可能需要学习更多关于批处理脚本或PowerShell脚本的知识,或者考虑开发一个小型的应用程序来实现这些功能。

请在实施这些操作时谨慎行事,并确保你有足够的权限来修改系统设置。

根据AI的回答,我发现,AI没有完全理解我的问题,有点理解错误,因此我纠正这个错误。

我再问:

是检查自己有没有被关闭,或者说不用检查自己被关闭,被用户关闭就不关机。否则就关机。这个功能用于远程链接,如果开机后两分钟内,没有远程链接并关闭这个窗口。windows就自动关机。保护windows强制关机造成的损坏。

小技巧:我的提问中有错别字,但我没有改正。我这样做,也是提醒同样用AI的朋友们,有一些错字没关系,当然没错更好。AI理解力还是很强的,有一定的自动纠错能力。

AI回答:

了解您的需求后,我们可以稍微修改之前的脚本,使其在开机后2分钟内检查一个特定的条件是否满足(在这个场景中是检查一个特定的程序或窗口是否被关闭),如果满足(即没有远程连接并关闭该窗口),则执行关机操作。这里我们假设这个“窗口”是一个简单的批处理脚本界面,当然,这个“窗口”可以是任何你用来作为远程连接标志的程序。

第1步:创建标志窗口脚本

首先,我们创建一个简单的批处理脚本,作为远程连接的标志。当这个脚本运行时,它只是打开一个命令提示符窗口,如果这个窗口在2分钟内被关闭,那么就不执行关机操作。我们将这个脚本命名为RemoteConnectionFlag.bat:

@echo off

echo Waiting for remote connection...

pause

第2步:编写主脚本

然后,我们编写主脚本,这个脚本会在开机时运行RemoteConnectionFlag.bat,等待2分钟,然后检查RemoteConnectionFlag.bat是否还在运行,如果还在运行,说明没有远程连接并关闭该窗口,就执行关机操作。我们将这个脚本命名为AutoShutdownIfNoRemote.bat:

@echo off

start "" "RemoteConnectionFlag.bat"

timeout /t 120

tasklist /fi "WindowTitle eq RemoteConnectionFlag.bat" |find ":" > nul

if errorlevel 1 shutdown /s /f /t 0

注意:这里的WindowTitle eq RemoteConnectionFlag.bat可能需要根据实际情况进行调整,因为窗口标题可能会因为脚本的实际路径或命令行解释器的不同而有所不同。您可能需要手动检查任务管理器中该脚本运行时的窗口标题,并相应地调整。

第3步:设置脚本开机自启动

您可以通过将AutoShutdownIfNoRemote.bat脚本或其快捷方式放入Windows的"启动"文件夹来实现开机自启动,具体操作步骤如下:

按下Win+R键打开运行对话框,输入shell:startup,然后按回车。这会打开“启动”文件夹。

将AutoShutdownIfNoRemote.bat文件的快捷方式复制到这个文件夹里。

这样,每次开机时,Windows就会自动运行这个脚本,从而实现您的需求。

额外注意:

请确保在实施这些脚本之前进行充分测试,以避免意外的关机导致工作丢失。

根据您的具体需求,可能需要调整脚本中的等待时间或其他逻辑。

如果您的远程连接程序有特定的进程名或窗口标题,您可能需要对脚本进行相应的调整,以确保正确识别远程连接的建立和断开。

讲解:其实AI也不是万能的,AI只是个辅助工具罢了,我是专家级程序员了,一眼就看出来这段解答中的问题。然后我就提醒AI改正。

我问:

有路径问题吧?得指定执行RemoteConnectionFlag.bat的路径吧?

AI很诚实外加谦虚的的回答:

是的,您提到了一个重要的点。如果RemoteConnectionFlag.bat不在同一个目录下,或者该目录未被包含在系统的环境变量PATH中,那么在AutoShutdownIfNoRemote.bat脚本中直接调用RemoteConnectionFlag.bat可能会失败,因为系统无法找到这个文件。为了解决这个问题,我们需要在调用RemoteConnectionFlag.bat时指定其完整的路径。

修改后的AutoShutdownIfNoRemote.bat

假设RemoteConnectionFlag.bat位于C:\Scripts目录下,那么我们应该这样修改AutoShutdownIfNoRemote.bat:

@echo off

start "" "C:\Scripts\RemoteConnectionFlag.bat"

timeout /t 120

tasklist /fi "WindowTitle eq RemoteConnectionFlag.bat" |find ":" > nul

if errorlevel 1 shutdown /s /f /t 0

这样,不论RemoteConnectionFlag.bat位于哪个目录,只要你在AutoShutdownIfNoRemote.bat中提供了正确的完整路径,系统就能够找到并执行它。

注意,在使用tasklist /fi "WindowTitle eq RemoteConnectionFlag.bat"这条命令时,确保窗口标题正确无误。实际上,窗口标题可能并不是脚本的文件名。你可能需要运行RemoteConnectionFlag.bat,然后在任务管理器中查看该批处理脚本打开的命令提示符窗口的确切标题,并据此调整AutoShutdownIfNoRemote.bat中的窗口标题过滤条件。

如果你的RemoteConnectionFlag.bat脚本不仅仅是打开一个窗口等待关闭,而是执行了一些其他操作(比如启动一个用于远程连接的程序),你可能需要根据实际情况调整AutoShutdownIfNoRemote.bat中的逻辑,以确保它能够正确地判断远程连接是否已经建立。

通过这种方式,你可以确保无论RemoteConnectionFlag.bat位于系统的哪个目录下,AutoShutdownIfNoRemote.bat都能够正确地找到并执行它,从而实现在没有建立远程连接的情况下自动关机的功能。

讲解:AI的这个解答确实能解决问题,但是我觉得还有更优化的解决方案,我提醒AI给我一个更好的解决方案。这种交互,是AI帮我解决问题,我也在帮AI提高智商。

我问:如果不检测别人,只检测自己不也解决这个问题了么?

AI回答:

确实,如果目标是检测脚本自身是否在一定时间内被关闭(而不是检测另一个程序或脚本),那么可以简化设计,无需检查其他进程。这种方法可以直接应用于远程连接场景,如果在指定时间内没有人关闭该脚本(即没有建立远程连接),则自动执行关机。

这里是一个简化版的脚本,我们可以称之为AutoShutdownIfNoAction.bat,它不需要检测其他程序或脚本,只需在开机后等待一定时间(例如2分钟),如果在这段时间内脚本没有被手动关闭,则自动执行关机操作:

@echo off

echo Waiting for remote connection or manual shutdown...

timeout /t 120 /nobreak > nul

echo No action detected, shutting down...

shutdown /s /f /t 0

如何工作:

脚本启动时,会显示一条消息提示等待远程连接或手动关闭。

使用timeout命令等待指定时间(这里是120秒,即2分钟),/nobreak参数确保等待不能被键盘操作中断。

如果在等待时间结束前,脚本没有被关闭,那么会显示一条消息提示将要执行关机,并使用shutdown命令立即关机。

如何手动关闭脚本以防止关机:

用户可以在等待时间结束前简单地关闭命令提示符窗口,或者按Ctrl+C中断脚本运行,以此来阻止脚本继续执行关机命令。

设置脚本开机自启动:

与之前相同,您可以将AutoShutdownIfNoAction.bat文件或其快捷方式添加到Windows的"启动"文件夹,以实现开机自启动。

『加入书签,方便阅读』