Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 如何在Windows命令行上删除字符串中的前缀?_String_Batch File - Fatal编程技术网

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

String 如何在Windows命令行上删除字符串中的前缀?,string,batch-file,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 如何删除这些前缀?将其放入批处理文件并运行,它应该可以

假设我想回显%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

如何删除这些前缀?

将其放入批处理文件并运行,它应该可以完成此任务

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

可以使用批处理的字符串替换函数

pushd %programfiles%
set "prefix=%programfiles%"
setlocal DisableDelayedExpansion
for /r . %i in (*.exe) do (
  set "progPath=%~i"
  setlocal EnableDelayedExpansion
  set "progPath=!progPath:%prefix%=!"
  echo !progPath!
  endlocal
)
popd
这个答案是基于

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

代码中包含注释

@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

你的前缀是什么?只有第一层?你想要什么
C:\progam files\program3\Application\bin\program3.exe
?@jeb我想要
program3\Application\bin\program3.exe
,因为前缀是'C:\program files',你可以用
CD/D C:\program files\Common files
谢谢你让我知道。修改了帖子。但是现在你不再需要
set dirBase=…
set dirDrive=…
或者
%dirDrive%
,再次感谢。我不得不将
set dirBase
留在那里,因为这是一个从不同驱动器运行批处理文件的示例。