删除最后一个字符串批处理

Luc*_*gos 7 batch-file

您好我需要在txt文件中生成图像列表,但我必须删除最后一个字符并删除重复项

SDFDFDF_1.jpg
SDFDFDF_2.jpg
THGGHFG_1.jpg
THGGHFG_2.jpg
Run Code Online (Sandbox Code Playgroud)

并且必须在txt列表中保持这种状态

SDFDFDF
THGGHFG
Run Code Online (Sandbox Code Playgroud)

我的代码只删除.jpg

@echo off
if exist "sku.txt" del "sku.txt"
for /f "delims=" %%f in ('dir *.jpg /b') do echo %%~nf >> sku.txt
Run Code Online (Sandbox Code Playgroud)

ank*_*ork 26

Batch支持从字符串中取出子字符串的语法.这个的一般语法是

%string:~start,end%
Run Code Online (Sandbox Code Playgroud)

基本用法:

set test=test
echo %test:~2,3%
::st
Run Code Online (Sandbox Code Playgroud)

这如何适用于您的问题?当负数用作结束索引时,子字符串会在字符串结尾之前停止许多字符.此行为可以轻松地从字符串末尾删除字符.

set test=test
echo %test:~0,-1%
::tes
Run Code Online (Sandbox Code Playgroud)


jpf*_*jpf 7

如果启用了扩展,这应该可以工作:

@echo off
if exist "sku.txt" del "sku.txt"
setlocal enabledelayedexpansion
set list=
for /f "usebackq delims=" %%f in (`dir /b *.jpg`) do (
  set xx=%%~nf
  set candidate=!xx:~0,-2!
  set n=0
  for %%i in (!list!) do (
    if "!candidate!"=="%%i" (
      set n=1
    )
  )
  if !n! EQU 0 (
    set list=!list! !candidate!
    echo !candidate! >> sku.txt
  )
)

endlocal
Run Code Online (Sandbox Code Playgroud)