【问题标题】:Windows Batch: What does the "~" do? [duplicate]Windows Batch:“~”有什么作用? [复制]
【发布时间】:2014-12-19 18:52:49
【问题描述】:

我只是想知道“~”符号在批处理文件中的作用,我知道它与变量相关联。

我可以举一些例子来说明它的作用吗?

谢谢。

【问题讨论】:

  • 阅读文档。查看 FOR 和 CALL 帮助的底部。在命令行中,键入HELP CALLHELP FOR,或CALL /? AND FOR /?

标签: batch-file cmd


【解决方案1】:

这取决于~ 使用的命令,因为dbenhamMagoo 已经写了。一般来说,它的意思是:获取一个变量(循环或环境变量)的值或一个参数字符串,并通过修改传递给批处理文件。

一个非常简单的例子:

有一个批处理文件test.bat,内容为:

@echo Parameter 1 as specified: %1
@echo Parameter 1 (no quotes):  %~1

开头是

test.bat "C:\Program Files\Internet Explorer\iexplore.exe"

双引号是必须的,因为路径中有空格。

批处理文件输出:

Parameter 1 as specified: "C:\Program Files\Internet Explorer\iexplore.exe"
Parameter 1 (no quotes):  C:\Program Files\Internet Explorer\iexplore.exe

所以在这个例子中,~ 导致在没有双引号的情况下获取第一个参数的值。

正如dbenham 已经写的那样,在命令提示符窗口中输入命令并阅读窗口中的帮助输出。

  1. help callcall /?
  2. help forfor /?
  3. help setset /?

在许多带有空格或其他特殊字符的命令字符串中——在输入cmd /? 后查看最后的帮助页面输出——必须用双引号引起来。但其他人要求删除双引号,就像使用命令 if 比较两个双引号字符串时一样,或者像使用 echo 那样不需要双引号。

再举一个例子:

@echo off
if /I "%~n1" == "iexplore" echo Browser is Internet Explorer.
if /I "%~n1" == "opera" echo Browser is Opera.
if /I "%~n1" == "firefox" echo Browser is Firefox.

在此示例中,~n 仅从作为第一个参数传递给批处理文件的字符串中获取不带双引号、路径和文件扩展名的文件名。

参数 0 是当前执行的批处理文件,可以通过以下方式演示:

@echo off
echo Batch file was called with: %0
echo Batch file is stored on drive:  %~d0
echo Batch file is stored in folder: %~dp0
echo Batch file name with extension: %~nx0

【讨论】:

    【解决方案2】:

    取决于您未提供的上下文。

    例如,如果 %%a 中有文件名,则 %%~za 将返回文件大小,%%~ta 将返回文件日期/时间。其他时候可能是子串运算符,比如%fred:~1,6%fred的子串,跳过第一个1,选择下一个6最大值。

    【讨论】:

      猜你喜欢
      • 2013-07-24
      • 2015-05-03
      • 2013-07-08
      • 2010-10-27
      • 2019-05-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-04
      相关资源
      最近更新 更多