2017-10-08 23 views
0

我试图将一个字符串作为参数传递给一个批处理文件。使用SET替换%〜db1

这工作:

set PWD="%~dp1" 
set "PWD=%PWD:\=/%" 

这使内PWD变量传递的参数的父目录的路径,然后替换\字符/字符。

有没有办法通过执行一个命令来实现这一个班轮而不是两个?

这样的事情:set "PWD=%~dp1:\=/%,但是,这并不明显的工作。

请详细说明两种方法,使用DelayedExpansion而不使用它。

+0

从技术上讲,'%PWD%'变量将包含第一个参数/参数的父路径。 – Compo

回答

1

在发布之前测试过了吗?

你的代码将产生

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执行字符串操作 - 移动报价划定将要执行的命令 - 以下之后的空间收盘价格将包括而不是

+0

谢谢,你还提到了我遇到的空间角色问题。我有点失望,不得不求助于'CALL'来正确操纵变量,尽管它似乎按预期工作。我很欣赏这个解释! –