首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >批量重命名.txt文件

批量重命名.txt文件
EN

Stack Overflow用户
提问于 2015-09-02 07:46:00
回答 2查看 88关注 0票数 0

我从Gutenberg项目下载了大约34000本.txt格式的书。现在我想用它的内容来重命名它们。例如,每个文本文件都包含其"Title“和"Author's Name”,因此我希望通过一些命令将其"Title“和"Author's Name”上的所有文本文件重命名。

我创建了一个批处理文件。它运行,但不重命名文件。这是我的密码:

代码语言:javascript
复制
    @echo off&setlocal
    cd E:\Test
    for /f "delims=" %%i in ('dir /a-d/b *.txt') do (
    set "nname="
    set "fname=%%~i"
    for /f "usebackqskip=7delims=" %%f in ("%%~i") do if not defined nname    
    set "nname=%%f"
    setlocal enabledelayedexpansion
    set "nname=!nname:~0,40!"
    echo rename "!fname!" "!nname!"
    endlocal
    )
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-09-02 08:36:09

你可以用这个作为基地

代码语言:javascript
复制
@echo off
    setlocal enableextensions disabledelayedexpansion

    rem Change to source folder
    pushd "e:\test" && (

        rem Where the renamed files will be placed to avoid re-rename
        if not exist renamed\ md renamed

        rem For each input file
        for %%f in (*.txt) do (

            rem Retrieve the data from inside the file
            set "author=" & set "title="
            for /f "tokens=1,* delims=: " %%a in ('
                findstr /b "Author: Title:" "%%~ff"
            ') do if not defined %%a set "%%a=%%b"

            rem If the fields have been retrieved then do the rename
            if defined author if defined title (
                setlocal enabledelayedexpansion
                for /f "delims=" %%a in ("!author! - !title!") do (
                    endlocal
                    echo move "%%~ff" "renamed\%%a%%~xf"
                    rem NOTE: operation is only echoed to console
                    rem       if console output seems correct, then
                    rem       remove the echo command
                )
            )

        )
        rem Done. Return to previous active directory
        popd
    )

当然,文件系统有关于文件名中允许的内容的规则,并且不知道可以找到什么样的字符,这段代码可能而且很可能无法重命名某些文件。

票数 0
EN

Stack Overflow用户

发布于 2015-09-02 08:26:35

当前脚本将只打印重命名命令,而不是执行它们。您应该删除这一行中的echo (在检查了它产生的内容之后):

代码语言:javascript
复制
echo rename "!fname!" "!nname!"

您的脚本还存在一些格式化问题。应该有这样的空间:

代码语言:javascript
复制
for /f "usebackq skip=7 delims=" %%f in ("%%~i") do

在这之后不应该有新的行:

代码语言:javascript
复制
if not defined nname
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32347371

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档