【问题标题】:Need clean syntax in batch批量需要干净的语法
【发布时间】:2016-04-07 02:14:05
【问题描述】:

上下文

  • 我想我可以通过正确创建 *.bat file 来解决问题。

  • 我正在自动化一个名为 Acronis Backup and Recovery 的备份程序中的进程。

  • 我能够制作一个脚本(jScript),它可以正确创建除一部分之外的所有语法。

  • 在正常的命令提示符下,我将运行的命令如下所示

acrocmd backup file --include="C:\documents\Gale_thesis.doc" "D:\Sandbox\!oDC!-IMG_0222.MOV" "C:\temp\magnifyReader" --loc="D:\backups" --arc="Backup1a"
  • 我正在创建的jScript 可以毫无问题地生成它并保存为 *.bat 文件。如果我的文件名是干净的,这可以完美地工作。干净是指批处理文件认为没有字符是关键字和命令。

  • 每当我有“复制”之类的词或“!”之类的字符时在文件名中它失败了。

问题

所以我现在想知道从文本文件中加载变量是否可以解决问题?

我相信很多读者都知道,在命令行加载多个文件/文件夹路径时,您需要用双引号将它们括起来。

    1234563
  • 我曾尝试关注有关使用 for /f 等的信息。

  • 但是示例不够广泛,我无法理解,似乎没有人解释如何将这些变量与其他语法混合使用。

  • 我对使用 *.bat 文件中的变量了解一些。我的 jScript 应用程序可以生成任何格式的文本列表,转义,任何需要的。

谢谢

【问题讨论】:

  • 在你开始疯狂追逐之前(使用你不了解的技术发明一个复杂的“解决方案”),你应该了解为什么你的原始代码会失败。如果启用延迟扩展,我可以看到! 可能会导致问题,但我无法想象您为什么需要延迟扩展。我无法想象包含copy 的文件名将如何失败。请编辑您的问题并发布一个成功的“干净名称”示例生成的 bat 脚本。然后发布一个示例 bat 脚本,该脚本以 ! 的名称失败,一个以 copy 的名称命名。另外,展示你是如何启动 bat 脚本的。
  • !oDC! 是否应该是文件名中的字符串文字(这将是一个非常不寻常的名称)?还是应该是环境变量的延迟扩展?

标签: variables batch-file command


【解决方案1】:

我可能建议你看看转义字符 http://www.robvanderwoude.com/escapechars.php

在for循环中!var!在启用延迟扩展时使用,因此您可能需要转义它

我使用 Aacini 提供的以下代码来测试正在传递的参数

@echo off
setlocal enabledelayedexpansion

set argCount=0
for %%x in (%*) do (
   set /A argCount+=1
   set "argVec[!argCount!]=%%~x"
)

echo Number of processed arguments: %argCount%

由于启用了延迟扩展,我不得不逃跑!人物

arg.bat --include="C:\documents\Gale_thesis.doc" "D:\Sandbox\^^^!oDC^^^!-IMG_0222.MOV" "C:\temp\magnifyReader" --loc="D:\backups" --arc="Backup1a"

还有关于三重转义引号^^^

这里的问题是我们需要传递两个特殊字符, 第一个是向上箭头^,第二个是感叹号! 所以第二个批处理文件(读取我们参数的那个)应该得到^! 逃避 ^ 我们使用 ^^ 和逃避!我们使用 ^!

感谢 Aacini 在HERE 中提供的代码

【讨论】:

  • 您好,感谢您的回复。哇,这是另一种动物。我的意思是从 PHP 和其他我见过的东西。我可以在命令提示符中输入确切的语法,并得到我需要的内容(图片)。
  • 我在想必须有某种方法告诉 *.bat 转义引号之间的所有内容都是合法的。在您的帮助下,我可以看到情况并非如此。因此,构建一组清理命令以确保所有路径都合法是一种常见的做法吗?我可以用生成 *.bat 的东西来做到这一点,我从中加载变量似乎很多。在某些语言中,它们具有为您清理的功能或包,有类似的东西吗?谢谢
  • 这里有两张在 cmd 窗口中工作的图片Pic1Pic2
  • 好吧,关于自动消毒,不幸的是,据我所知没有As Mentioned Here 但好的一面是,要转义的字符列表并不长,因此您可以编写一个基本的 for 循环检查字符并添加他们需要的转义符
  • 非常感谢您的帮助。现在我不会花太多时间寻找不会退出的东西。至于可能存在什么......如果您知道任何为逃脱而构建的循环示例,您能否联系我。再次感谢。
猜你喜欢
  • 2020-09-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-20
  • 2020-04-13
相关资源
最近更新 更多