使用CSV值重命名文件

使用CSV值重命名文件,csv,batch-file,Csv,Batch File,我有这样的文件: 1989_Footer.gif 1989_Header.gif 260273_Footer.gif 260273_Header.gif ... 我有一个CSV,看起来像这样: 1989;10773387 260273;10776516 ... 我想用CSV中给定的文件编号重命名文件编号。CSV中的第一个数字是旧数字,第二个数字(分号后)是新数字。我怎样才能在不触碰下划线后的文本的情况下做到这一点 我考虑获取文件名,然后在CSV中搜索数字,并将其替换为分号后同一行中的值。@E

我有这样的文件:

1989_Footer.gif
1989_Header.gif
260273_Footer.gif
260273_Header.gif
...
我有一个CSV,看起来像这样:

1989;10773387
260273;10776516
...
我想用CSV中给定的文件编号重命名文件编号。CSV中的第一个数字是旧数字,第二个数字(分号后)是新数字。我怎样才能在不触碰下划线后的文本的情况下做到这一点

我考虑获取文件名,然后在CSV中搜索数字,并将其替换为分号后同一行中的值。

@ECHO OFF
SETLOCAL
设置“sourcedir=U:\sourcedir”
设置“filename1=%sourcedir%\q40908252.txt”
对于/f“usebackqtokens=1*delims=;”(“%filename1%”)中的%%a,请执行以下操作(
对于('dir/b/a-d”%sourcedir%\%a\*')中的/f“tokens=1*delims=\'%r,请执行以下操作(
回显(REN“%sourcedir%\%%r\%%s”“%%b\%%s”
)
)
后藤:EOF
您需要更改
sourcedir
的设置以适应您的环境

我使用了一个名为
q40908252.txt
的文件,其中包含了用于测试的数据

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

读取csv文件,使用
作为分隔符,将from前缀放在
%%a
中,to前缀放在
%%b

在源目录中执行名为“%%a_anything”的文件目录列表,在
\
上标记,以便第一个标记(必须是
%%a
)转到
%%r
,名称的其余部分转到
%%s
,然后使用切换的前缀重命名文件

假定文件名中的第一个
\uu
永远不会是多个-
\u
@ECHO OFF
SETLOCAL
设置“sourcedir=U:\sourcedir”
设置“filename1=%sourcedir%\q40908252.txt”
对于/f“usebackqtokens=1*delims=;”(“%filename1%”)中的%%a,请执行以下操作(
对于('dir/b/a-d”%sourcedir%\%a\*')中的/f“tokens=1*delims=\'%r,请执行以下操作(
回显(REN“%sourcedir%\%%r\%%s”“%%b\%%s”
)
)
后藤:EOF
您需要更改
sourcedir
的设置以适应您的环境

我使用了一个名为
q40908252.txt
的文件,其中包含了用于测试的数据

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

读取csv文件,使用
作为分隔符,将from前缀放在
%%a
中,to前缀放在
%%b

在源目录中执行名为“%%a_anything”的文件目录列表,在
\
上标记,以便第一个标记(必须是
%%a
)转到
%%r
,名称的其余部分转到
%%s
,然后使用切换的前缀重命名文件

假设文件名中的第一个
\uu
永远不会是多个-
\u
My可以简化解决方案。JREN.BAT是纯脚本(混合批处理/JScript)从XP开始在任何Windows计算机上本机运行-无需第三方exe文件。可通过命令行通过
jren/?
jren/??
获取完整文档,以获取分页帮助

从批处理脚本中:

@echo off
for /f "delims=; tokens=1,2" %%A in (rename.csv) do call jren "^%%A_" "%%B_" /fm *.gif
从命令行:

for /f "delims=; tokens=1,2" %A in (rename.csv) do @jren "^%A_" "%B_" /fm *.gif
My可以简化解决方案。JREN.BAT是纯脚本(混合批处理/JScript),从XP开始在任何Windows计算机上本机运行-无需第三方exe文件。可通过命令行通过
JREN/?
,或
JREN/??
获取分页帮助的完整文档

从批处理脚本中:

@echo off
for /f "delims=; tokens=1,2" %%A in (rename.csv) do call jren "^%%A_" "%%B_" /fm *.gif
从命令行:

for /f "delims=; tokens=1,2" %A in (rename.csv) do @jren "^%A_" "%B_" /fm *.gif

我可能会这样做(参见解释性说明
rem
):

@echo关闭
setlocal EnableExtensions DisableDelayedExpansion
rem//在此处定义常量:
设置“_CSV=%~dpn0.CSV”&rem//(保存新旧编号的CSV文件的路径)
设置“_LOC=%~dp0”&rem//(包含要重命名文件的目录的路径)
设置“\u PAT=*.gif”&rem//(第一个“\u”之后的文件名部分的模式)
rem//逐行浏览CSV文件并读取新旧编号:
对于/F“usebackq令牌=1-2 delims=,;”%%K in(“%\u CSV%”)do(
rem//搜索名称以旧数字和``开头的文件:
对于/F“delims=“%%F in('dir/B/A:-D“%\u LOC%\%%K\u PAT%”)do(
rem//将当前文件名存储到变量中:
设置“名称=%%F”
rem//切换延迟扩展以不丢失文件名中的任何“!”:
setlocal EnableDelayedExpansion
rem//通过将旧编号替换为新编号来重命名当前文件:
ECHO ren“%\u LOC%\!NAME!”“%%L!NAME:*\u=!”
端部
)
)
端部
退出/B
成功测试脚本后,删除大写的
ECHO
命令!


这种方法的优点是,即使第一个
后面的文件名部分也是以
开头,它也能工作;因此,文件名
1989\uuuuuuuuuuuuuuuuu name.gif
将重命名为
10773387\uuuuuuuuuuuuuu some.gif
,因此两个连续的
将被保留下来。

我可能会这样做(参见解释性备注
rem
):

@echo关闭
setlocal EnableExtensions DisableDelayedExpansion
rem//在此处定义常量:
设置“_CSV=%~dpn0.CSV”&rem//(保存新旧编号的CSV文件的路径)
设置“_LOC=%~dp0”&rem//(包含要重命名文件的目录的路径)
设置“\u PAT=*.gif”&rem//(第一个“\u”之后的文件名部分的模式)
rem//逐行浏览CSV文件并读取新旧编号:
对于/F“usebackq令牌=1-2 delims=,;”%%K in(“%\u CSV%”)do(
rem//搜索名称以旧数字和``开头的文件:
对于/F“delims=“%%F in('dir/B/A:-D“%\u LOC%\%%K_