如何在Windows控制台中使用反斜杠而不是正斜杠制作git打印路径

时间:2017-01-16 18:06:02

标签: windows git

当它在Windows控制台中打印出路径时,是否可以使git print反斜杠而不是正斜杠?我希望能够复制它输出的路径并将其粘贴到我未来的控制台命令中。

示例输出:

C:\vna>git status
On branch herpderp
Your branch is up-to-date with 'origin/herpyderp'.
Untracked files:
  (use "git add <file>..." to include in what will be committed)

    Java/HerpDerp/src
    Java/HerpDerp/src/main/java/com/derp/messaging/
    Java/HerpDerp/src/main/java/com/derp/controller/event/
    Java/HerpDerp/src/main/java/com/derp/controller/domain/
    Java/HerpDerp/src/main/java/com/derp/controller/monitor/


nothing added to commit but untracked files present (use "git add" to track)

而不是

Java/HerpDerp/src/main/java/com/derp/messaging/

我想看看

Java\HerpDerp\src\main\java\com\derp\messaging\

甚至

Java\\HerpDerp\\src\\main\\java\\com\\derp\\messaging\\

编辑:我应该澄清这是因为在Windows控制台中使用git。此外,对我来说似乎正确的答案是使用Git Bash。

3 个答案:

答案 0 :(得分:2)

我知道它有点旧,但您可以使用环境变量替换将/替换为\\\

C:\> SET FILE=Java/HerpDerp/src
C:\> ECHO %FILE:/=\%
Java\HerpDerp\src

C:\> ECHO %FILE:/=\\%
Java\\HerpDerp\\src

C:\>

为了更进一步,您可以编写一个批处理文件来执行输出一系列路径的命令:(以下示例中为git diff --name-only HEAD~1

SETLOCAL ENABLEDELAYEDEXPANSION
FOR /F "usebackq delims=" %%i IN (`git diff --name-only HEAD~1`) DO (
  SET FILE=%%i
  ECHO !FILE:/=\!
)
ENDLOCAL

答案 1 :(得分:2)

谢谢Lance Clark和VonC。多年来,我一直在Windows,Unix / Linux和Mac上使用Git,但我从来不了解Git如何通过Windows Command Shell运行。我遇到了这个问题,因为我在DOS命令外壳(Windows命令提示符)中正斜杠遇到了麻烦。

在DOS命令外壳中,我正在调用delete命令(“ del”)以使用“ git status”返回的文件路径删除文件,该路径中当然带有正斜杠。结果,返回错误“无效开关”,或者如果我将路径用引号引起来,则错误为“系统找不到指定的路径”。那是我进行网络搜索并遇到此堆栈溢出问题的时间。

答案使我了解了Git Bash以及Git在Windows中的实际工作方式。结果,我将尽可能切换到在Windows上使用Git Bash,而不是DOS命令外壳。这也使Windows,Linux和Mac之间的来回往返生活变得更加轻松。我的前斜线和后斜线的噩梦现在通常都比较好,而且我晚上可以入睡。 :)

以下是一些有关Git Bash的简要信息的链接,这些链接帮助我了解了它的工作原理:

答案 2 :(得分:1)

git status将通过git bash会话执行,因此它不会在路径中使用\(如&#34; Git Bash for Windows showing/expecting file paths with forward-slashes, no drive colon&#34;)中所示。
另请参阅&#34; Why Windows Uses Backslashes and Everything Else Uses Forward Slashes&#34;

如上所述,您必须对命令的输出进行后处理才能获得正确的路径格式,例如&#34; Bash converting path names for sed so they escape&#34;。

st=$(git status)
echo "${st////\\}"

echo "${st////\\\\}"

with:
         //  / /  \\\\}"
          ^  ^ ^  ^
          |  | |  |
          |  | |  replacement, backslash needs to be backslashed
          |  | delimiter
          |  string
      global
    substitution