Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何通过Windows命令提示符和C在一个字符串中更改两项#_C#_Command Prompt - Fatal编程技术网

C# 如何通过Windows命令提示符和C在一个字符串中更改两项#

C# 如何通过Windows命令提示符和C在一个字符串中更改两项#,c#,command-prompt,C#,Command Prompt,在C#和Windows命令提示符下完全是新手,所以请耐心等待我 这是我第一次编写代码来创建一个可执行文件,用于更改注册表以及Chrome中的首选项 先来点背景知识。与我签约的公司的工程师使用一个名为Cadkey的旧程序,该程序用于查看该公司自40年代以来生产的产品的文件 很多人可能都知道,为了安全起见,Chrome不再允许在浏览器中查看小程序和其他类型的文件,但该公司的大多数工程师宁愿使用Chrome而不是IE 因此,我的任务是让他们能够通过“应用程序链接”打开文件,有些人还将其称为“自定义ur

在C#和Windows命令提示符下完全是新手,所以请耐心等待我

这是我第一次编写代码来创建一个可执行文件,用于更改注册表以及Chrome中的首选项

先来点背景知识。与我签约的公司的工程师使用一个名为Cadkey的旧程序,该程序用于查看该公司自40年代以来生产的产品的文件

很多人可能都知道,为了安全起见,Chrome不再允许在浏览器中查看小程序和其他类型的文件,但该公司的大多数工程师宁愿使用Chrome而不是IE

因此,我的任务是让他们能够通过“应用程序链接”打开文件,有些人还将其称为“自定义url协议”,如以下示例所示:

<a href="cadkey://<some domain>/<some drive>/<some directory>/<some file name>.prt">some file</a>
工程师们有一个小的引导模式,它给了他们下载exe的指令,然后双击exe来安装注册表项并更改Chrome prefs

那有什么问题?该代码将密钥注册到用户的注册表,并更改Chrome首选项文件,最后通知用户该操作成功

问题是某些文件的名称中有空格,这会使Cadkey提示用户找不到该文件。主要是因为“%20”出现在空格处。我猜Cadkey是在urlencoding不是设计的一部分的时候制作的

我试图通过命令提示符更改url,就像从传递给命令提示符的参数中删除字符串“cadkey:”一样:

cmd /V:ON /C \"SET r=%1 & start C:\\CK19\\Ckwin.exe !r:cadkey:=! & !r:%20= !\"
我试过:

cmd /V:ON /C \"SET r=%1 & start C:\\CK19\\Ckwin.exe !r:cadkey:=! | !r:%20= !\"
cmd /V:ON /C \"SET r=%1 & start C:\\CK19\\Ckwin.exe !r:cadkey:=! & !r:%%20= !\"
我试过:

cmd /V:ON /C \"SET r=%1 & start C:\\CK19\\Ckwin.exe !r:cadkey:=! | !r:%20= !\"
cmd /V:ON /C \"SET r=%1 & start C:\\CK19\\Ckwin.exe !r:cadkey:=! & !r:%%20= !\"
我尝试使用另一个var

cmd /V:ON /C \"SET r=%1 & !r:cadkey:=! & SET s=r start C:\\CK19\\Ckwin.exe !s:%20= !\"
虽然该命令成功地替换了字符串“cadkey:”——但我还没有同时替换这两个字符串。我尝试了太多的东西,但我是一个新手,任何帮助都将不胜感激


提前感谢

在昨晚与我的老板就此进行了讨论之后,我们终于找到了一个答案,如下所示:

改变

cadkeyCommand.SetValue("", "cmd /V:ON /C \"SET r=%1 & start C:\\CK19\\Ckwin.exe !r:cadkey:=!\"");
致:


结果是字符串“cadkey:”和字符串“%20”都被删除,字符串“%20”被一个空格替换,这导致以下内容被传递到cadkey,在这里您可以看到变量“t”

,基本上,在cmd中,应该在路径周围使用双引号,并在其中加空格。它将被windows shell正确识别。但是您已经有了大约
的值是多少!r:cadkey:=?你为什么需要这样的语法?@PavelAnikhouski感谢你的回复,很抱歉回复晚了。我累得都睡着了。为了回答你的问题!r:cadkey:=!从发送到命令提示符的参数中删除字符串“cadkey:”,该参数允许使用cadkey.exe。除非文件名中有空格,否则此选项有效。当文件名中有空格时,Windows会将其替换为“%20”,并且程序Cadkey太旧,无法理解“%20”,导致Cadkey显示提示:“找不到文件”