使用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_