【问题标题】:Removing part of filename with batch用批处理删除部分文件名
【发布时间】:2016-06-16 15:14:30
【问题描述】:

我尝试调整提供给类似问题的大量代码,但我认为没有发布解决方案。我的问题是我要删除其余部分的部分在最后一次之前存在 2 次!

我有一个文件夹:

number1-number2-number3 - some random text about the file.filetype

number1 的范围是 01 到 99
number2 的范围是 1-99999
number3 的范围是 1- 999 可能有 2 位小数,与整数之间用 . 分隔。

示例文件夹c:\temp\:

15-1592-1 - file 1.doc
15-1592-2 - this is file2.pdf
15-1592-3 - this cointains subfiles.html
15-1592-3.1 - sub1.jpg
15-1592-3.2 - sub2.pdf

我需要的是一个文件夹,其中 number3 结尾之后的所有内容都从文件名中删除,而且文件类型保持不变。

例子:

15-1592-1.doc
15-1592-2.pdf
15-1592-3.html
15-1592-3.1.jpg

我知道,综合阅读所有答案,这很可能是安静的。

我缺乏的是编译它的知识!

【问题讨论】:

  • 到目前为止你尝试过什么?请通过editing问题帖分享您的代码!

标签: batch-file file-rename


【解决方案1】:

您想删除第一个空格之后的所有内容(不带扩展名)
如果您使用修饰符,这很容易(请参阅for /?):

@echo off
setlocal enabledelayedexpansion
for %%a in (??-*-*) do (
  for /f "tokens=1 delims= " %%b in ("%%~na") do (
     ECHO ren "%%a" "%%b%%~xa"
  )
)

【讨论】:

  • 我还没有看到你的答案。巧妙地使用通配符,我完全忘记了它们。
  • 是的。确实很有帮助!谢谢!
【解决方案2】:

提取小数部分(如果存在)有点棘手,但这应该可以完成工作(可能需要一些令牌调整以满足您的需要)

@echo off

setlocal enabledelayedexpansion

set "source_path=c:\temp\*"

for /f "tokens=1,* delims=." %%a in ('dir /b %source_path%') do (
  set "ext=" & set "decimal="
  for /f "tokens=1,* delims=." %%i in ("%%b") do (
    if "%%j" neq "" (
       set "ext=%%j"
       for /f "tokens=1,* delims=- " %%d in ("%%i") do set "decimal=.%%d"
    ) else (
       set "ext=%%i"
    )
  )
  for /f "tokens=1-3,* delims=- " %%i in ("%%a") do (
    rem replace echo with operation you need 
    echo %%i-%%j-%%k!decimal!.!ext!
  )  
)  

endlocal

【讨论】:

    猜你喜欢
    • 2018-11-14
    • 1970-01-01
    • 2011-03-14
    • 2017-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多