我想使用 Sublime Text 2 构建一个文件,然后进行简单的复制。我设法使用构建系统完成了第一件事,我认为使用构建系统进行复制也是可能的(因为我可以在批处理文件中进行复制)。
我想要做的批处理脚本是:
copy /b hang.bin+sectors.bin image.img
我使用的构建系统是:
{
"cmd": ["copy", "/b", "hang.bin+sectors.bin", "image.img"],
"working_dir": "$file_path"
}
我收到的错误信息:
[Error 2] The system can't find the specified file
[cmd: [u'copy', u'/b', u'hang.bin+sectors.bin', u'image.img']]
[dir: C:\Documents and Settings\xxx\Desktop\Project]
[path: C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\Program Files\Common Files\Ulead Systems\MPEG]
[Finished]
是的,我对 hang.bin 文件进行了硬编码,看看是否可行,但不行。通常我会${file_name}.bin
在那里使用。
我怀疑要复制的两个文件(复制到一个新文件)的 + 语法是问题所在,但我不确定。有人能帮我吗?
答案1
where copy
在命令行中运行,你会发现这copy
不是一个程序,而是一个由 提供的内置命令cmd
。Sublime Text 原生运行构建系统,不需要cmd
,所以它无法识别copy
。
有一个解决方法:通过 执行命令cmd
。从cmd
的帮助(参见这或者这):
CMD [/A | /U] [/Q] [/D] [/E:ON | /E:OFF] [/F:ON | /F:OFF] [/V:ON | /V:OFF]
[[/S] [/C | /K] string]
/C Carries out the command specified by string and then terminates
因此,例如,cmd /C notepad
将执行记事本并立即退出,而不等待它退出。cmd /C copy
也将起作用,因为它是通过执行的cmd
。您的命令应如下所示:
cmd /C "copy /b hang.bin+sectors.bin image.img"
记住引号,否则/b
,命令的其余部分将被视为 的参数cmd
,而不是copy
。
答案2
这对我有用:
它适用于路径和文件whitespaces
通过以下方式分散争论"arg" ,
:
[..., "/C", "START", "${file_path}", "${file_name}"]
将其粘贴到您的Batch.sublime-build
文件。
{
"file_patterns": ["*.bat"],
"selector": "source.Batch",
// This runs the batch file in cmds' console
"cmd": ["cmd", "/C", "START", "${file_path}", "${file_name}"]
}
然后,批处理文件就可以在 CMD 的 CLI 中运行了。我想也可以传递参数,但这可能是您的起点。
上述命令将运行 cmd.exe 并在其本机控制台中运行代码。这将接受您的输入。蝙蝠文件。
这是一个可以保存为BatchStConsole.sublime-构建
{
"file_patterns": ["*.bat"],
"selector": "source.Batch",
// This outputs to Sublime Texts' console
"cmd": ["cmd", "/C", "${file}"]
}
以上将在 Sublime Texts 的控制台中运行代码。这将不接受你的输入。蝙蝠文件。但对于调试仍然有用,因为它可以传递任何参数,如本机 CLI,但没有交互。
相关帮助: