batch-file - 批量SUBSTRING一个文件名

标签 batch-file for-loop substring filenames

我需要帮助来制作批处理代码(如果可能的话)以从文件名中获取子字符串。 我的文件名可以像(文件名长度正在改变):

7_D_D1_012345678-2015-07-07.pdf
8_A_087654321-2015-07-07.pdf
10_D_D1_011122558-2015-07-07.pdf
100_C_CCC1_C2_C3_C4_055555555-2015-07-07.pdf

文件编号 - 从左到第一个 _

id1 - 从 1 到 n 的字符串,带 _ 分隔符;例如 C_C1_C2_C3_C4

id2 - 总是 9 位; 例如 011122558

日期 - 例如 2015-07-07

扩展名.jpg

如何为文件夹中的所有文件名循环子字符串(文件号、id1、d2、日期)并将其放入我的代码

convert - "file number" -annotate "id1" -annotate2 "id2" -annotate "date"

例如:

convert - "01" -annotate "C_C1" -annotate2 "012345678" -annotate "2015-07-07"

感谢您的帮助。

最佳答案

纯批处理。简单的字符串操作与标记化相结合。无需额外的实用程序。

(g.txt 包含您的示例文件名;可以替换为 'dir/b/a-d')

@echo off
for /f %%i in (g.txt) do call :process %%i
goto :eof

:process
set x=%1
set ext=%x:*.=%
for /f "delims=_" %%i in ("%x%") do set fileno=%%i
for /f "tokens=1,*delims=-" %%i in ("%x%") do (
  set x1=%%i
  set x2=%%j
)
for /f "tokens=1,* delims=." %%i in ("%x2%") do (
  set dat=%%i
  set ext=%%j
)
set id2=%x1:~-9%
for /f "tokens=1,* delims=_" %%i in ("%x1:~0,-10%") do set id1=%%j
echo filename   %x%
echo ------------------------
echo    Nr. %fileno%
echo    ID1 %id1%
echo    ID2 %id2%
echo    Date    %dat%
echo    Ext.    %ext%
echo ------------------------
echo convert - "%fileno%" -annotate "%id1%" -annotate2 "%id2% -annotate "%dat%"
echo(
echo(
goto :eof

关于batch-file - 批量SUBSTRING一个文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31556415/

相关文章:

C:如何找出一个字符串中以任意顺序出现一定数量的字符?

batch-file - 使用批处理脚本启动 Jenkins 构建

batch-file - 在批处理文件的路径中使用多个通配符

c - 使用 for 循环将 char 数组传递到文件

Python遍历对象属性

python - 如何从仅部分知道 key 的python dict中检索?

C# 字符串操作正则表达式或子字符串?

debugging - Windows 批处理文件调试器?

windows - 如何按照用户输入指定的次数运行命令?

java - 将数组转换为多维数组 - Java