2017-08-11 44 views
0

我正在构建一个需要执行动态构建的终端命令跨平台的解决方案。这是在MacOS命令(实际上是单个文本行,改变了可读性):如何在不出现错误的情况下运行多个`cmd.exe/c`命令?

cat "/path/to/file1.txt" "/path/to/file2.txt" > "/path/to/output.txt" ; 
rm "/path/to/file1.txt" ; rm "/path/to/file2.txt" 

了一些研究之后,在Windows上,相当于将是:

cmd.exe /c type "C:/path/to/file1.txt" "C:/path/to/file2.txt" > "C:/path/to/output.txt" ; 
del "C:/path/to/file1.txt" ; del "C:/path/to/file2.txt" 

现在,似乎工作时,我手动在PowerShell中,但我得到的错误。请注意,文件的串联和删除似乎工作,但我发现了以下错误:

The system cannot find the file specified. 
Error occurred while processing C:/path/to/file1.txt 
The system cannot find the file specified. 
Error occurred while processing C:/path/to/file2.txt 

当命令的Windows版本的动态构建和执行,串联工作,但该文件中删除该信息不,我的猜测是因为这些错误。

为了像macOS版本一样工作,这需要什么Windows版本?

(在你想知道的情况下,这是使用来自BaseElements插件BE_ExecuteSystemCommand功能的FileMaker数据库中。)

+0

“*当命令的Windows版本是动态生成并执行*” - 它是如何动态地构建和执行? (以及为什么在PowerShell中输入命令提示符命令?) – TessellatingHeckler

+0

我使用FileMaker的字符串操作功能构建。上面的命令('cmd.exe/c ...')在FileMaker中执行时会连接文件,但不会删除它们。当完全相同的字符串被粘贴到PowerShell中(至于为什么我使用它来测试命令,如果有的话会欢迎​​更好的方法),但它有效,但有错误。它使用上面提到的BE_ExecuteSystemCommand函数在macOS和Windows上执行。 – Chuck

+1

打开命令提示符并键入'type asdf; asdf' - 你看到四个同样的错误找不到/错误发生的输出。分号在bash和PowerShell中结束,但我认为它们不在cmd.exe中。从你的链接文档中,BE_ExecuteSystemCommand就像在命令行中输入一样,所以你不需要'cmd/c'部分。你可以用三个不同的电话吗?你可以在字符串中加入换行符\ r \ n'字符吗? – TessellatingHeckler

回答

2

Windows使用反斜杠,而不是正斜杠,在路径名称中。某些命令将允许您使用正斜杠来代替,但del是不是其中之一:

C:\Users\UoW>del "c:/Users/UoW/test.dat" 
The system cannot find the path specified. 

C:\Users\UoW>del "c:\Users\UoW\test.dat" 

C:\Users\UoW> 
+0

我还必须将这些命令分成三个调用,而不是一个,除此之外,您的解决方案就是我所需要的。 – Chuck

+0

您可以使用'&'组合多个命令合并成一个单独的文件,还要注意一个'del'命令可以删除多个文件。 –

0

尽量留在PowerShell中,试试这个:

Add-Content -Path "C:/path/to/output.txt" -Value (Get-Content "C:/path/to/file1.txt")  
Add-Content -Path "C:/path/to/output.txt" -Value (Get-Content "C:/path/to/file2.txt")  
Remove-Item -Path "C:/path/to/file1.txt"  
Remove-Item -Path "C:/path/to/file2.txt" 
+0

我只使用PowerShell来测试生成的命令。我正在寻找一个等同于上面的macOS版本使用'cmd.exe/c'的单行代码。你的解决方案是否有这样的版本? – Chuck

+0

我很抱歉,我错过了PowerShell仅用于测试并且无法用于生产的部分。回到你原来的cmd.exe方法;如果你更换;在你的行中,然后它将允许执行多个命令。 cmd.exe/c type“C:/path/to/file1.txt”“C:/path/to/file2.txt”>“C:/path/to/output.txt”& del“C:/ path/to/file1.txt“&del”C:/ path/to/file2。txt“应该可以完成你想要在一行中完成的任务 –

相关问题