批量需要干净的语法

时间:2016-01-03 08:27:21

标签: variables batch-file command

上下文

  • 我想我可以通过正确创建*.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文件。如果我的文件名是干净的,这可以完美。通过干净我的意思是批处理文件认为没有字符是关键字和命令。

  • 任何时候我在文件名中都有“copy”或“!”这样的字符,它会失败。

问题

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

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

  • 所以我需要这个变量才能让批处理文件解析正确的语法,并且在我在命令提示符下直接输入时就像示例一样工作。

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

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

  • 我对在* .bat文件中处理变量有点了解。我的jScript应用程序可以生成任何格式的文本列表,转义,需要什么。

由于

1 个答案:

答案 0 :(得分:0)

我可能会建议你去看看逃避角色 http://www.robvanderwoude.com/escapechars.php

in for loops!var!在启用delayedexpansion时使用,因此您可能需要将其转义

我使用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%

由于启用了delayedexpansion,我不得不逃脱!字符

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

另外关于三重逃脱引用^^^

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

感谢Aacini在HERE

中的代码