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

时间:2011-06-13 19:07:57

标签: string batch-file

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

cd %programfiles%
for /r . %i in (*.exe) do echo "%~i"

但它产生了

c:\program files\program1\program1.exe
c:\program files\program2\program2.exe

我想要

program1\program1.exe
program2\program2.exe

如何删除这些前缀?

3 个答案:

答案 0 :(得分: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
)

答案 1 :(得分:4)

将其放入批处理文件并运行,它应该可以完成这项工作。

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

答案 2 :(得分:0)

此答案基于jebs

这是如果您的批处理文件与您正在使用的驱动器不在同一驱动器上,则需要采用不同的方法。

代码中包含注释。

@echo off
::
rem Based of the answer: https://stackoverflow.com/a/6335341/8262102
title Removes prefix from directories example...
set "dirBase=C:\Program Files\Common Files"
cd /d %dirBase% &rem changes to the directory.
setlocal DisableDelayedExpansion
for /r . %%A in (*.exe) do (
  set "progPath=%%~A"
  setlocal EnableDelayedExpansion
  set "progPath=!progPath:%dirBase%=!"
  echo .!progPath!
  endlocal
)
echo/ & pause & cls