【问题标题】:Copy string of characters from the middle of filename to the beginning将文件名中间的字符串复制到开头
【发布时间】:2014-02-13 12:34:37
【问题描述】:

拥有 2,000 个文件,每个文件的文件名长度为 51-62 个字符。对于每个文件名,我想将位置 14-23 中的字符拉伸添加到文件名的最开头。 (文件名字符类型和模式是可变的,因此重命名必须基于从文件名开头计算的位置。) Windows 7,命令提示符 FCIV 解决方案首选。

例如:

原文:

abcdefghijklmNo0123456p8901234567890.ext

新:

No0123456pabcdefghijklmNo0123456p8901234567890.ext

【问题讨论】:

    标签: batch-file cmd filenames rename


    【解决方案1】:
    @ECHO OFF
    SETLOCAL
    SET "sourcedir=c:\folder"
    FOR /f "delims=" %%a IN (
     'dir /b /a-d "%sourcedir%\*" '
     ) DO (
     SET "name=%%a"
     CALL :transform
    )
    
    GOTO :EOF
    
    :transform
    ECHO REN "%sourcedir%\%name%" "%name:~13,10%%name%"
    GOTO :eof
    

    所需的 REN 命令仅用于测试目的ECHOed。验证命令正确后,将ECHO REN 更改为REN 以实际重命名文件。

    变量sourcedirset 指向感兴趣的目录。通过设置一个变量,目录名可以在一个地方更改,而不是在多个地方编辑它,如果它在多个地方使用。 set "var=value" 语法确保行上的任何尾随空格不包含在分配的值中。

    dir 命令在目标目录中生成文件名列表 /b 表示“仅文件名 - 没有标题/尾行,没有日期,时间大小 - 只是文件名”/a-d 表示“并且没有目录名"

    此列表是在内存中构建的,然后由for/f 逐行读取。 "delims=" 确保将整行应用于元变量 %%a,以便包含默认分隔符的文件名不会被截断。然后将每个文件名分配给变量name,因为子字符串不能直接应用于元变量。然后执行子程序:transform

    子程序非常简单——它所做的只是echo 一个重命名命令,使用由变量sourcedirname 构建的完整文件名。 ren 命令的语法要求新名称是纯名称,子目录是隐式的。新名称由 name 中的子字符串构建而成,从字符 13(第一个字符是字符 0)开始,长度为 10 个字符 + 原始名称。

    由于dir 列表是在for 开始执行之前在内存中构建的,因此传递给for 的名称是原始名称。如果文件已重命名,则不会重新处理它,因为它的新名称不在原始列表中。

    ECHOren 行的想法是让用户可以看到生成的ren 命令是否正确。所发生的只是将报告发送到屏幕上。如果随后确定结果显示正确,则将echo ren 更改为ren 实际上将执行重命名而不是报告它。这是由用户做出的决定。如果生成的ren 错误(位置或长度计数错误,或目录错误或其他),则不会造成任何伤害,因为该产品只是一个报告,直到将echo ren 更改为ren 运行作业。

    【讨论】:

    • 谢谢! “dir /b /a-d”代表什么,我应该改变它吗?我是否只将 ECHO REN 更改为 REN 并确保 c:\sourcedir 正确或必须自定义其他参数?
    • 这是一个从“命令提示符”使用的批处理文件。鉴于您标记了查询“Dos”和“batch-processing”,不知道您还可能期待什么。
    • 要重命名的文件:C:\test C:\test>@ECHO OFF SETLOCAL SET "sourcedir=\C:\test" FOR /f "delims=" %%a IN ( %%a此时出乎意料。'dir /b /ad "%sourcedir%*" '''dir' 不是内部或外部命令、可运行程序或批处理文件。) DO ( SET "name=%%a" CALL :transform 在批处理脚本之外调用批处理标签的尝试无效。) GOTO :EOF :transform REN "%sourcedir%\%name%" "%name:~13,10%%name%" 文件名、目录名或卷标语法不正确。转到:eof
    • 哎哟 - 不要将每一行都写入命令窗口。将所有内容粘贴到名为Transform.bat 的文件中,然后键入transform 启动该文件
    • 指定c:\folder中的实际文件夹,从ECHO REN中删除ECHO,将脚本粘贴到记事本中,命名为Transform.bat。完美运行,谢谢!!!
    猜你喜欢
    • 2014-08-03
    • 2018-08-07
    • 2021-11-14
    • 2016-07-30
    • 2021-12-08
    • 1970-01-01
    • 2011-08-30
    • 2019-12-16
    • 2017-02-07
    相关资源
    最近更新 更多