相关疑难解决方法(0)

Windows命令解释器(CMD.EXE)如何解析脚本?

我遇到了ss64.com,它为如何编写Windows命令解释器将运行的批处理脚本提供了很好的帮助.

但是,我一直无法找到批处理脚本的语法,扩展或不扩展的方法,以及如何逃避事情的良好解释.

以下是我无法解决的示例问题:

  • 如何管理报价系统?我制作了一个TinyPerl脚本
    (foreach $i (@ARGV) { print '*' . $i ; }),编译它并以这种方式调用它:
    • my_script.exe "a ""b"" c"?输出是 *a "b*c
    • my_script.exe """a b c"""?输出它*"a*b*c"
  • 内部echo命令如何工作?在那个命令中扩展了什么?
  • 为什么我必须for [...] %%I在文件脚本中使用,但for [...] %I在交互式会话中?
  • 什么是转义字符,以及在什么情况下?如何逃脱百分号?例如,我怎么能%PROCESSOR_ARCHITECTURE%字面回声?我发现echo.exe %""PROCESSOR_ARCHITECTURE%有效,有没有更好的解决方案?
  • 如何%配对?例:
    • set b=a,echo %a %b% c%%a a c%
    • set a =b,echo %a %b% c%bb c%
  • 如果此变量包含双引号,如何确保变量作为单个参数传递给命令?
  • 使用 …

windows parsing cmd batch-file variable-expansion

132
推荐指数
5
解决办法
6万
查看次数

如何在双引号字符串中使用对象的属性?

我有以下代码:

$DatabaseSettings = @();
$NewDatabaseSetting = "" | select DatabaseName, DataFile, LogFile, LiveBackupPath;
$NewDatabaseSetting.DatabaseName = "LiveEmployees_PD";
$NewDatabaseSetting.DataFile = "LiveEmployees_PD_Data";
$NewDatabaseSetting.LogFile = "LiveEmployees_PD_Log";
$NewDatabaseSetting.LiveBackupPath = '\\LiveServer\LiveEmployeesBackups';
$DatabaseSettings += $NewDatabaseSetting;
Run Code Online (Sandbox Code Playgroud)

当我尝试使用字符串执行命令中的一个属性时:

& "$SQlBackupExePath\SQLBackupC.exe" -I $InstanceName -SQL `
  "RESTORE DATABASE $DatabaseSettings[0].DatabaseName FROM DISK = '$tempPath\$LatestFullBackupFile' WITH NORECOVERY, REPLACE, MOVE '$DataFileName' TO '$DataFilegroupFolder\$DataFileName.mdf', MOVE '$LogFileName' TO '$LogFilegroupFolder\$LogFileName.ldf'"
Run Code Online (Sandbox Code Playgroud)

它试图只使用值$DatabaseSettings而不是值$DatabaseSettings[0].DatabaseName,这是无效的.
我的解决方法是将其复制到一个新变量中.

如何直接在双引号字符串中访问对象的属性?

powershell string-interpolation

84
推荐指数
5
解决办法
5万
查看次数

单引号在Windows批处理文件中的作用是什么?

我最近在Windows cmd中运行了一个带有单引号的命令,发现它的行为与我的预期不符.

从尝试google"windows批量单引号vs双引号"我发现了一些文章,其中人们询问有什么窗口处理单引号如双引号,以及bash如何处理单引号和双引号不同.但是,我无法轻易找到Windows批处理命令中单引号的明确解释.

那么单引号在Windows批处理文件中做了什么?他们是否执行任何类型的引用功能?

quotes cmd batch-file

31
推荐指数
1
解决办法
2万
查看次数

Powershell:将json字符串传递给curl

我正在尝试使用curl将一个来自powershell脚本的JSON字符串传递给build.phonegap.com api.
根据phonegap的论坛,当在Windows机器上运行时,JSON数据必须格式化为:

curl.exe -ku user@email:mypass -X PUT -d "data={\"password\":"\keypass\"}" https://build.phonegap.com/api/v1/key
Run Code Online (Sandbox Code Playgroud)


实际上,从命令行调用时,这确实运行良好.
但是,当我尝试在powershell脚本中调用它时,双引号似乎被剥离.

到目前为止,我尝试过:

  • 将JSON放在单引号字符串中:
    curl.exe -ku user@email:mypass -X PUT -d '"data={\"password\":\"keypass\"}"'  https://build.phonegap.com/api/v1/key
  • 将JSON放在单引号字符串中,而不使用DOS转义反斜杠:
    curl.exe -ku user@email:mypass -X PUT -d '"data={"password":"keypass"}"'  https://build.phonegap.com/api/v1/key
  • 将JSON放在单引号字符串中,转义双引号和反斜杠(带有反斜杠的DOS样式):
    curl.exe -ku user@email:mypass -X PUT -d '\"data={\\\"password\\\":\\\"keypass\\\"}\"'  https://build.phonegap.com/api/v1/key
  • 将JSON放在双引号字符串中,使用powershell返回刻度字符'转义双引号:
    curl.exe -ku user@email:mypass -X PUT -d "`"data={\`"password\`":\`"build*2014`\`"}`""  https://build.phonegap.com/api/v1/key



知道怎么做到这一点?

谢谢你的时间,科恩

powershell curl

4
推荐指数
2
解决办法
6654
查看次数

CMD中单引号和双引号的区别

我有一个 powershell 文件,用于替换配置文件中的 IP。powershell 接受三个参数:

  1. 文件名 ( 'C:\Program Files (x86)\app\app.conf')
  2. 更换IP
  3. 新IP

由于我们依赖于为我们的服务使用批处理文件来处理任务,因此我编写了一个批处理脚本,该脚本只需要三个参数并将其发布到 powershell 脚本。

我们使用批处理文件来调用和解析参数: ($只是用来表示变量)

changeip.bat '$filepath' $oldip $newip
Run Code Online (Sandbox Code Playgroud)

这失败了,但我不明白为什么。我试过使用双引号而不是单引号$filepath,它奏效了。

如何$filepath用双引号而不是单引号来理解空格?

powershell cmd batch-file

4
推荐指数
1
解决办法
3503
查看次数