我试图将一个字符串作为参数传递给一个批处理文件。使用SET替换%〜db1
这工作:
set PWD="%~dp1"
set "PWD=%PWD:\=/%"
这使内PWD
变量传递的参数的父目录的路径,然后替换\
字符/
字符。
有没有办法通过执行一个命令来实现这一个班轮而不是两个?
这样的事情:set "PWD=%~dp1:\=/%
,但是,这并不明显的工作。
请详细说明两种方法,使用DelayedExpansion
而不使用它。
我试图将一个字符串作为参数传递给一个批处理文件。使用SET替换%〜db1
这工作:
set PWD="%~dp1"
set "PWD=%PWD:\=/%"
这使内PWD
变量传递的参数的父目录的路径,然后替换\
字符/
字符。
有没有办法通过执行一个命令来实现这一个班轮而不是两个?
这样的事情:set "PWD=%~dp1:\=/%
,但是,这并不明显的工作。
请详细说明两种方法,使用DelayedExpansion
而不使用它。
在发布之前测试过了吗?
你的代码将产生
PWD=\=/
如果它产生了“正确的结果”那是因为你没有(在@echo off
后直接通常由setlocal
)每次运行结束结算pwd
,因此结果将是当前%~dp1
的非,但是之前的设置为pwd
。
您的代码首先设置pwd
是"c:\whatever..."
(包括引号)加上空间的&
之前,然后再次设置到pwd
PWD 的与\
先前值由/
代替。
cmd
将解决涉及%var%
第一和然后执行的结果的任何表达。用delayedexpansion
,!var!
评估运行时间和%var%
在分析时间。
由于在metavariables
上不允许字符串操作,所需的操作不能被压缩为单个语句;该值必须首先通过普通的环境变量。
要解决你的语句,使用
set "PWD=%~dp1" & CALL set "PWD=%%PWD:\=/%%"
将在一个子shell后第一值赋给pwd
执行字符串操作 - 移动报价划定将要执行的命令 - 以下之后的空间收盘价格将包括而不是。
谢谢,你还提到了我遇到的空间角色问题。我有点失望,不得不求助于'CALL'来正确操纵变量,尽管它似乎按预期工作。我很欣赏这个解释! –
从技术上讲,'%PWD%'变量将包含第一个参数/参数的父路径。 – Compo