![](/img/trans.png)
[英]How can I filter an array of strings to remove elements that are prefixes of other elements?
[英]How to remove prefixes in strings on Windows command line?
假设我想回显 %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
如何删除这些前缀?
您可以使用字符串替换批次的 function
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
setlocal ENABLEDELAYEDEXPANSION
cd %programfiles%
for /r . %%i in (*.exe) do (
set pth=%%~fi
set val=!pth:%cd%\=!
echo !val!
)
这个答案是基于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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.