在 Windows 批处理脚本中用正斜杠替换反斜杠

Replace Backslash with Forwardslash in Windows batch script

我正在编写一个简单的批处理脚本来获取文件夹中的文件名并将输出写入文件。同时,我正在向文件附加一个字符串。

  @echo off
  set $string=!source ./
  set "loc=C:\path\to\dir\files\scripts\"

  pushd %loc%
  (for %%a in (*) do (
  echo %$string%%%~dpnxa))>output.txt
  popd
  

output.txt:

  !source ./C:\path\to\dir\files\scripts\abc.txt
  !source ./C:\path\to\dir\files\scripts\xyz.txt

我很难在输出中用正斜杠 / 替换反斜杠 \ 并且还从路径中删除这部分 C:\path\to\dir\files\

最后,我试图将这样的内容写入文件:

final_output.txt:

  !source ./scripts/abc.txt
  !source ./scripts/xyz.txt

任何帮助都会很棒。

@ECHO Off
SETLOCAL
set "$string=!source ./"
set "loc=U:\path\to\dir\files\scripts\"

pushd %loc%
FOR %%a IN ("%loc%.") DO SET "locparent=%%~dpa"
(for %%a in (*) do (
 SET "line=%%~dpnxa"
 CALL SET "line=%$string%%%line:%locparent%=%%"
 CALL ECHO %%line:\=/%%))>output.txt

popd
GOTO :EOF

[我使用驱动器 u: 进行测试]

你不能对元变量进行子字符串化(%%a 在这种情况下)- 你需要转移到用户变量。

建立line后,使用call set执行命令SET "line=valueof$string%line:valueofloc=%",将line中已经不需要的字符串替换为nothing.

然后使用call echo执行ECHO %line:\=/%,将剩余的\替换为/

您的叙述表明您希望从输出中删除 C:\path\to\dir\files\scripts,但您的示例输出包括 scripts.

[调整后包括叶名]