你好我需要在txt文件中生成图像列表,但我必须删除最后一个字符并删除重复项
示例
SDFDFDF_1.jpg
SDFDFDF_2.jpg
THGGHFG_1.jpg
THGGHFG_2.jpg
并且必须在txt列表中保持这种方式
SDFDFDF
THGGHFG
我的代码只删除了.jpg
@echo off
if exist "sku.txt" del "sku.txt"
for /f "delims=" %%f in ('dir *.jpg /b') do echo %%~nf >> sku.txt
答案 0 :(得分:22)
Batch支持从字符串中取出子字符串的语法。一般语法是
%string:~start,end%
基本用法:
set test=test
echo %test:~2,3%
::st
这如何适用于您的问题?当负数用作结束索引时,子字符串会在字符串结尾之前停止许多字符。此行为可以轻松地从字符串末尾删除字符。
set test=test
echo %test:~0,-1%
::tes
答案 1 :(得分:2)
如果启用了扩展程序,则应该可以使用:
@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
答案 2 :(得分:0)
@ECHO OFF
SETLOCAL
SET "sourcedir=U:\sourcedir"
SET "prev="
(
FOR /f "tokens=1delims=_" %%a IN (
'dir /b /o:n /a-d "%sourcedir%\*.jpg" '
) DO (
CALL :unique %%a
)
)>u:\newfile.txt
GOTO :EOF
:unique
IF /i "%prev%"=="%1" GOTO :EOF
SET "prev=%1"
ECHO(%1
GOTO :EOF
您需要更改sourcedir
的设置以适合您的具体情况。
制作u:\ newfile.txt
该过程执行源目录的目录列表,基本格式(仅限文件名),没有目录,按名称顺序,将每个名称指定给%%a
,但delims
选项仅指定该部分在分隔符(_
)
unique
子例程将其参数(部分文件名)与找到的先前名称(不区分大小写)进行比较,如果它们不同,则将prev
设置为新找到的名称,{ {1}} es es。
答案 3 :(得分:0)
您的规格非常不精确。您声明需要删除名称的最后一个字符,但是删除了扩展名,加上前面两个字符(下划线和数字)。
如果您有一个名为ABC_12.jpg的文件怎么办?
如果你有ABC.jpg怎么办?
我假设您只想处理看起来像* _n.jpg的文件,其中n是数字。
您可以使用我的JREN.BAT utility获取与模板匹配的所有文件的列表,并删除最后两个字符和扩展名。您可以将其传输到我的JSORT.BAT utility以排序和删除重复项。这两个实用程序都是混合JScript /批处理脚本,可以在XP以后的任何Windows机器上本机运行。
jren ".{6}$" "" /list /rfm "_\d\.jpg$"|jsort /u /i >sku.txt