比较来自世界各地的卖家的域名和 IT 服务价格

批处理重命名替换源文件名的一部分 DOS 和 Bash

我知道它是很多次讨论的,但我仍然找不到这个特定方面的好解决方案。 我有同样的问题 bash, 和在 DOS. 我有许多文件的文件 .csv 名称 abcYYMMDDf.csv, 我想将文件名更改为零件 YYMMDD, 这对应于其创建日期。 注意 "f" 后 YYMMDD, 所以事实上我希望相当 excel mid// 占据了中期。

在 bash 我理解重命名和通配符*的功能,我尝试了变体


rename abc*f.csv *.csv abc*


想什么 * 会站立 YYMMDD, 但显然,它不是。
我已经看到另一种包括选择的方法。 s//[a-z]*/, 但是,当然,这将只是拿所有的文件名?

在 DOS 我试过了


ren abc*f.csv *.csv
已邀请:

三叔

赞同来自:

扩展参数 Bash 可用于删除 'abc' 和 'f' 在两个阶段,使用删除前缀并分别替换模板。


for f in abc*f.csv; do
new_f=${f#abc}
new_f=${new_f/%f.csv/.csv}
mv $f $new_f
done


您可以使用
sed

而不是扩展要删除的参数 'abc' 和 'f' 一步:


for f in abc*f.csv; do
new_f=$/echo $f | sed 's/abc\/.*\/f/\1/'/
mv $f $new_f
done


我无法回答这个版本 DOS; 您可能需要在一个单独的问题中询问。

莫问

赞同来自:

为了 "DOS" 问题的一部分:假设您正在进行中 Windows, 使用命令行 /cmd.exe/, 而不是 true DOS, 使用 command.com


@echo off
setlocal enableDelayedExpansion
for %%F in /abc*f.csv/ do /
set "name=%%F"
ren "%%F" "!name:~1,6!.csv"
/


更新

怎么样的规则 REN 与通配符标志合作,可以在本节中找到
https://superuser.com/q/475874/109090
. 不幸的是,规则在这种情况下没有帮助。

卫东

赞同来自:

一部分 bash /有两个步骤/:


rename abc "" abc*
rename f.csv .csv *f.csv


必须工作,因为您想要替换部分 "abc" 空字符串 /即删除部分 abc/. 重命名时,您必须仅指定要替换的部件,而不是所有文件名 /有关详细信息,请参阅重命名参考页面/.

第二步负责去除 trailing 'f'.

一部分 DOS:

我认为只有通过重命名只能解决这个问题。 也许你应该看一些球队 Powershell...

窦买办

赞同来自:

我有一个解决方案 DOS, 您可以创建所需的行 excel, 然后将它们复制并粘贴到命令行中。 它将自动执行您复制到命令行的每个字符串。

REN "folderpath\filename" "newName"


REN "C:\Users\Charlie\Desktop\_Working General\L2795187.HH293.11.xml.csv" "HH293-11.csv"


我创造了前面 excel 用公式,只是把它放进去 cmd. 我想要在列A中重命名的每个文件的单元格,并且它运行正常。

要回复问题请先登录注册