忽略批处理文件百分号忽略批处理文件百分号(Ignore percent sign in batch

2019-05-08 19:49发布

我有一个从一个文件夹移动到另一个文件的批处理文件。 该批处理文件是由另一个过程中产生的。

一些我需要移动有字符串“%20”在他们的文件:

move /y "\\myserver\myfolder\file%20name.txt" "\\myserver\otherfolder"

这将失败,因为它试图找到与该名称的文件:

\\myserver\myfolder\file0name.txt

有没有办法忽略% ? 我不能够改变产生逃避这一点,文件如通过加倍百分号( %% ),以逃避/^ (尖),等等。

Answer 1:

您应该能够使用插入符号(^) 逃脱百分号 。

编者注:该链接现在是死的; 无论哪种方式:这是%本身逃脱% ,但只有在批处理文件中,而不是在命令提示符下; ^ 从未逸出% ,但在该命令提示可以间接地用于防止可变膨胀,在只有无引号字符串。

之所以%2正在消失的是,该批处理文件代传递的第二个参数,你似乎没有第二个参数。 解决办法之一是将实际尝试foo.bat ^%1 ^%2...所以,当%2在命令中遇到,它实际上是用文字取代%2



Answer 2:

您需要使用%%在这种情况下。 通常使用^ (尖)会工作,但%的迹象,你需要加倍。

在的情况下%%1%%iecho.%%~dp1因为%表示从命令或从变量输入(当与包围% ; %variable%

为了达到你所需要的:

move /y "\\myserver\myfolder\file%%20name.txt" "\\myserver\otherfolder"

我希望这有帮助!



Answer 3:

问题的标题是非常通用的 ,这必然会吸引很多读者寻找一个通用的解决方案。
相比之下,OP的问题是奇特 :需要处理与被虐待形成,不能修改自动生成的批处理文件: %体征不正确的逃跑了。
该接受的答案提供了一个巧妙的解决特定的-和异国情调的-问题,但势必会相对于通用的问题造成混乱。

如果我们专注于通用的问题

如何使用%在批处理文件中为文字字符/命令行上?

  • 里面一个批处理文件 ,总是逃避%作为%% ,无论是在未加引号的字符串或没有; 下面的产量My %USERNAME% is jdoe ,例如:

     echo My %%USERNAME%% is %USERNAME% echo "My %%USERNAME%% is %USERNAME%" 
  • 命令行 (交互式) -以及使用脚本语言壳调用函数时为- 行为从根本上那里面的批处理文件有所不同 :在技术上, % 不能在那里逃了出来没有在所有的情况下,工作的解决方法

    • 不带引号的字符串 ,你可以使用^名称破坏者”绝招 :为了简单起见, 放置一个^每之前%字符 ,但请注意,即使你不是技术上逃避 %这样(见下文的详细); 例如,下面再产生像My %USERNAME% is jdoe

       echo My ^%USERNAME^% is %USERNAME% 
    • 双引号字符串,你无法逃避%可言 ,但也有变通方法

      • 您可以使用不带引号的字符串作为上面,然后要求你额外 ^ -escape其他所有shell元字符,这是麻烦的; 这些元字符是: <space> & | < > " <space> & | < > "

      • 或者, 如果目标程序支持它应与大多数二进制可执行文件的工作 ,但不是批处理文件 ),你可以代表%字符。 "%" ; 例如:

         echo "My "%"USERNAME"%" is %USERNAME%" 
    • 脚本语言 ,如果你知道你调用一个二进制可执行文件 ,您可以通过放弃 -invoking赞成“无壳”变种的功能 ,如以避免问题的全部 使用execFileSync代替execSync在Node.js的


可选的背景信息的再命令行 (交互式)使用:

在帽子的提示杰布他与该部帮助。

命令行 (交互), %在技术上可以根本不被转义 ; 而^ 通常cmd.exe的转义字符,它不适用于%

如前所述,对于双引号字符串解,但也有不带引号的字符串的变通办法

说:“之所以^名称破坏者”招(类似^%USERNAME^%的工作原理是:

  • 它“破坏” 变量名 ; 也就是说,在上面的例子中cmd.exe查找一个变量名为USERNAME^ ,其中(希望)不存在。

  • 在命令行-不像在批处理文件- 未定义变量的引用将保留原样

从技术上讲, ^变量名内-内的任何地方,只要它不是旁边另一个^ -就足够了,让%USERNAME^%举例来说,就足够了,但我建议采取的有条不紊地把公约^ 每之前 % 为简单起见 ,因为它也适用于情况下,如up 20^%其中中断甚至没有必要的,但是是良性的,这样你就可以有条不紊地应用它,而不需要考虑的细节输入字符串。

^开口之前% ,而没有必要的,是良性的,因为^逃脱第二天字符时,它是否需要逃避-或者,在这种情况下, 可以躲过-与否。 净效果是,这种^实例最终无引号字符串中移除

主要假设的警告^实际上是在变量名 (见杰布在评论例)的法律性质 ; 如果您的变量名称结尾 ^ ,只需将“破坏性” ^ 别的地方的变量名,只要它不直接旁边另一^ (因为这将导致^出现在结果字符串中)。
这就是说,在(不太可能)的事件,你的变量,如名称^b^ ,你的运气了。



Answer 4:

在批处理文件,百分号,可以通过使用双百分号(%%)“逃脱”。 这样一来,一个百分号将在命令行中使用。 从http://www.robvanderwoude.com/escapechars.php



Answer 5:

我想我已经得到了部分解决方案的工作。 如果你只是希望转移有其名称中“%20”的字符串,而不是寻找一个更广泛的解决方案文件,您也可以拨打第二批处理文件调用先用%% 2作为第二个参数。 这样,当你的程序试图当它击中%2在文本名称来获取第二个参数,它将与转义%2代替%2,留下的文件名不变。

希望这个作品!



文章来源: Ignore percent sign in batch file