Home > Net >  Replace Backslash with Forwardslash in Windows batch script
Replace Backslash with Forwardslash in Windows batch script

Time:03-30

I am writing a simple batch script to get the filenames in a folder and write the output to a file. At the same time, I am appending a string to the file.

  @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

I am having a hard time replacing backslash \ with forward-slash / in the output and also removing this part C:\path\to\dir\files\ from the path.

In the end, I am trying to achieve something like this written to a file:

final_output.txt:

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

Any help will be great.

CodePudding user response:

@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

[I used drive u: for testing]

Yo can't substring a metavariable (%%a in this case) - you need to transfer to a uservariable.

Having established line, use call set to execute the command SET "line=valueof$string%line:valueofloc=%", which replaces the unrequired string already in line by nothing.

Then use call echo to execute ECHO %line:\=/%, replacing any remaining \ with /.

Your narrative states you wish to remove C:\path\to\dir\files\scripts from the output, but your example output includes scripts.

[adjusted include the leafname]

  • Related