如何在Windows命令行中删除字符串中的前缀?

Jad*_*ias 4 string batch-file

假设我想回显%programfiles%文件夹中的每个可执行文件

cd %programfiles%
for /r . %i in (*.exe) do echo "%~i"
Run Code Online (Sandbox Code Playgroud)

但它产生了

c:\program files\program1\program1.exe
c:\program files\program2\program2.exe
Run Code Online (Sandbox Code Playgroud)

而且我要

program1\program1.exe
program2\program2.exe
Run Code Online (Sandbox Code Playgroud)

如何删除这些前缀?

jeb*_*jeb 7

您可以使用批处理的字符串替换功能

cd %programfiles%
set "prefix=%programfiles%"
setlocal DisableDelayedExpansion
for /r . %i in (*.exe) do (
  set "progPath=%~i"
  setlocal EnableDelayedExpansion
  set "progPath=!progPath:%prefix%=!"
  echo !progPath!
  endlocal
)
Run Code Online (Sandbox Code Playgroud)


ada*_*shr 5

把它放在一个批处理文件中并运行,它应该可以完成这项工作。

@echo off
setlocal ENABLEDELAYEDEXPANSION
cd %programfiles%
for /r . %%i in (*.exe) do (
    set pth=%%~fi
    set val=!pth:%cd%\=!
    echo !val!
)
Run Code Online (Sandbox Code Playgroud)