Jam*_* Ko 3 windows cmd batch-file command-prompt windows-10
假设您正在编写一个批处理脚本,您想在其中删除字符串中的引号。
如果字符串存储在常规Batch变量中,则可以执行以下操作:
set name="John"
echo %name:"=%
Run Code Online (Sandbox Code Playgroud)
如果字符串存储在位置参数中,则可以执行以下操作:
echo %~1
Run Code Online (Sandbox Code Playgroud)
您将如何实现脚本参数(尤其是%*变量)的相同效果?当我尝试使用与位置参数相同的符号时,得到以下信息:
> echo echo %~* > script.cmd
> script "123" "456"
The following usage of the path operator in batch-parameter
substitution is invalid: %~*
For valid formats type CALL /? or FOR /?
script was unexpected at this time.
Run Code Online (Sandbox Code Playgroud)
我该如何进行这项工作?有什么我不知道的特殊语法吗?任何帮助,将不胜感激,谢谢!
假设您正在编写一个批处理脚本,您想在其中删除字符串中的引号。
如果字符串存储在常规Batch变量中,则可以执行以下操作:
set name="John"
echo %name:"=%
您的主张不正确。使用字符串值时,更好的约定是始终使用set "variable=value"带"variable=value"引号的对,然后在需要时在检索时(而不是在赋值时)显式添加引号。例如:
@echo off
setlocal
set "xml=<node>Text</node>"
for /f "tokens=2 delims=<>" %%I in ("%xml%") do echo Text: %%I
Run Code Online (Sandbox Code Playgroud)
因此,引号不包含在变量值中,但是引用的任何特殊字符都应避免被错误解释。即使这不是您真正要问的,它仍然是值得实践的基本约定。
如果字符串存储在位置参数中,则可以执行以下操作:
echo %~1您将如何实现脚本参数(尤其是
%*变量)的相同效果?
的确,您可以对带有数字索引的单个参数使用波浪号表示法,但不能对%*集合使用。要解决您的难题,您必须%*使用for...in或shift...goto循环遍历。 for...in是更有效的选择。这是可行的解决方案的一百种可能的途径之一。
@echo off
setlocal enabledelayedexpansion
set "argv[0]=%~0"
set idx=1
for %%I in (%*) do (
set "argv[!idx!]=%%~I"
set /a ubound = idx, idx += 1
)
for /L %%I in (0,1,%ubound%) do echo %%I: !argv[%%I]!
rem // or you could also:
rem // set argv[
Run Code Online (Sandbox Code Playgroud)