各位。希望你们今天过得很愉快。
我目前正在尝试实现一个 TexStudio 脚本,该脚本获取我从截图工具获得的图像的名称(我复制它会自动将其保存在“屏幕截图”文件夹中),结合 Windows 的 CMD 和 TexStudio 的 Javascript 功能(在宏设置中)
- 使用截图工具“截屏”/截取屏幕
- 复制图片(现在保存在屏幕截图文件夹中,路径为 C:\Users\Dir1\Dir2\Dir3\Dir4\Pictures\Screenshots)
- 创建用于获取屏幕截图文件名的批处理文件脚本。在本例中,该脚本存储在 C:\Users\Dir5\Dir6\Dir7\scripts\actualScript.bat
- 使用 TexStudio 的
system
功能来使用外部命令(来自 CMD),外部命令是 actualScript.bat
现在,actualScript.bat 如下所示:
@echo off
FOR /F "eol=| delims=" %%I IN ('DIR "C:\Users\Dir1\Dir2\Dir3\Dir4\Pictures\Screenshots" /A-D /B /O-D /TW 2^>nul') DO (
SET NewestFile=%%I
GOTO FoundFile
)
ECHO No *.png file found!
GOTO :EOF
:FoundFile
echo %NewestFile%
本质上,此代码将在屏幕截图所在的目录中找到第一个文件并获取该第一个文件的名称。此后,循环将停止,文件的名称将存储在NewestFile
(如果未找到 .png 文件,则进行一些错误检查)。我已经在 CMD 中测试了此代码,它在 CMD 中运行良好。
以下是 TexStudio 中的 JavaScript 脚本:
%SCRIPT
var snipPath = "C:\Users\Dir1\Dir2\Dir3\Dir4\Pictures\Screenshots";
cmd = system("C:\Users\Dir5\Dir6\Dir7\scripts\actualScript.bat");
cmd.waitForFinished();
var output = cmd.readAllStandardOutputStr();
cmd.terminate();
editor.write(snipPath + "\\\\" + output);
//z
在编辑器中输入(触发器)来触发宏/脚本后,输出应如下所示:
C:\Users\Dir1\Dir2\Dir3\Dir4\Pictures\Screenshots\Screenshot 2024-03-09 020741.png
相反,输出如下所示:
C:\Users\Dir1\Dir2\Dir3\Dir4\Pictures\Screenshots\
在消息框中,我收到以下错误: 尝试执行 CMD 外部命令时出现错误消息 注意:我在路径中使用 \ 而不是 \ 的原因是,\ 本身在 TexStudio 的脚本中不会显示为输出(查看 3 条红色交叉线的屏幕截图)。这也是我不知道如何解决的一个问题:在文件路径中使用 \ 还是 \?
正如我之前所说,批处理脚本在 CMD 中运行良好。因此,我相信错误来自于我在 TexStudio 上的 JavaScript 脚本中实现批处理脚本的方式。我只是不确定错误是什么或它来自哪里。
以下是TexStudio脚本和宏中使用的函数和手册的来源:
- https://texstudio-org.github.io/advanced.html#“脚本宏”部分
- https://texstudio-org.github.io/advanced.html#“命令语法详解”部分。注意:我不太确定是否需要使用 txs///(是否扩展)。
我也曾想过尝试从该线程实现一些等效的东西,但对于 Batch/Windows 来说:
总之,我的目标是捕获屏幕(截图工具)、复制图像(保存在屏幕截图中)、从该图像中获取文件名,脚本通过一些脚本/宏将图像名称粘贴到文本编辑器中。其余部分将使用 includegraphics 实现该名称粘贴,但这是此过程中更容易的部分。
另外需要注意的是,我之前对 JavaScript 一无所知,对 CMD 也了解甚少。我只是从各种 StackOverflow 帖子和一些其他 YouTube 视频中获取了信息。任何帮助都非常感谢。