我从Gutenberg项目下载了大约34000本.txt格式的书。现在我想用它的内容来重命名它们。例如,每个文本文件都包含其"Title“和"Author's Name”,因此我希望通过一些命令将其"Title“和"Author's Name”上的所有文本文件重命名。
我创建了一个批处理文件。它运行,但不重命名文件。这是我的密码:
@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
)发布于 2015-09-02 08:36:09
你可以用这个作为基地
@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
)当然,文件系统有关于文件名中允许的内容的规则,并且不知道可以找到什么样的字符,这段代码可能而且很可能无法重命名某些文件。
发布于 2015-09-02 08:26:35
当前脚本将只打印重命名命令,而不是执行它们。您应该删除这一行中的echo (在检查了它产生的内容之后):
echo rename "!fname!" "!nname!"您的脚本还存在一些格式化问题。应该有这样的空间:
for /f "usebackq skip=7 delims=" %%f in ("%%~i") do在这之后不应该有新的行:
if not defined nnamehttps://stackoverflow.com/questions/32347371
复制相似问题