批处理脚本:为什么打印" =而不是空字符串?

时间:2016-03-24 03:46:06

标签: windows batch-file cmd windows-10 command-prompt

我尝试使用Batch中的参数扩展删除某些文本中的引号。谁能告诉我为什么这样:

@echo off
setlocal

set args=%*
echo %args:"=%

打印"=而不是什么?据我所知%args:"=%应该没有任何内容替换所有引号,所以我不明白为什么会发生这种情况。

任何帮助将不胜感激,谢谢!

编辑:为了澄清,我没有将任何参数传递给批处理脚本。

2 个答案:

答案 0 :(得分:3)

这是您未向脚本传递任何参数时获得的结果。

如果未定义args,则%args:"=%扩展如下:

  • %args:被视为不存在的变量扩展,变为空白
  • "=被视为自身
  • %(百分之一)被剥夺

这不直观,但恰好是cmd.exe的工作原理。有关详细信息,请参阅https://stackoverflow.com/a/7970912/1012053

您可以使用if defined

来解决问题
@echo off
setlocal

set args=%*
if defined args echo %args:"=%

答案 1 :(得分:1)

它可以在这里工作

if(empty($name)){
    echo 'Name is blank';
    exit;    
}elseif(empty($email) || !filter_var($email, FILTER_VALIDATE_EMAIL) === false){
  echo 'Email is invalid';
  exit;
}elseif(empty($company)){
 echo 'Company is blank'; 
 exit;   
}else{
   $name =  filter_var ($_POST['name'], FILTER_SANITIZE_STRING);
   $email =  filter_var ($_POST['email'], FILTER_SANITIZE_EMAIL);
   $company = filter_var ($_POST['company'], FILTER_SANITIZE_STRING);
   $fp = fopen("Daten.txt", "a");
   $savestring = $name . "\r\n" . $email . "\r\n" . $company . "\r\n" . "\r\n";
   fwrite($fp, $savestring);
   fclose($fp);
   echo "Thank you ... please stand by ...
 <meta http-equiv='Refresh' content='1; URL=.\play\index.html'>";
 }
?>

删除echo off显示此

C:\Windows\system32>"C:\Users\User\Desktop\Test2.bat" dog
dog

您没有传递任何命令行参数。

C:\Windows\system32>setlocal

C:\Windows\system32>set args=dog

C:\Windows\system32>echo dog
dog