@ECHO OFF
SETLOCAL
SET "sourcedir=U:\sourcedir"
:: read parameters
SET "filename1=%~1"
SET "filename2=%~2"
IF DEFINED filename2 GOTO name
IF NOT DEFINED filename1 GOTO :EOF
:: 1 parameter - must be filename
FOR /f "usebackqdelims=" %%a IN ("%filename1%") DO START /min "ren %%a" "%~f0" %%a
GOTO :eof
:: we have 2 parameters so rename pattern 1 to pattern 2
:name
FOR /r "%sourcedir%" %%a IN ("%filename1%*") DO CALL :process "%%a"
PAUSE
GOTO :EOF
:: Process the filenames and actually do the rename
:process
:: Name of file to be changed - name and extension of %1
SET "changeme=%~nx1"
:: REPLACE up-to-from-pattern with nothing = remainder of name/extension
CALL SET "endpart=%%changeme:*%filename1%=%%"
:: and RENAME...
ECHO(REN "%~1" "%filename2%%endpart%"
GOTO :eof
你需要改变的sourcedir
设置,以满足您的具体情况。
修正后的数据文件
STWP01_00669087 BCBSRI-01849351
BCBSRI-01849357 2011-12-19_BCBSRI-01849357
STWP01_00669094 BCBSRI-01849369
在处理上述文件,重命名文件开始(列1的条目),以开始针对
方法(列2的条目。):
运行批处理作为
batchname文件名
这将执行批处理,处理文件名
如何:
具有被设置为从,设置filename1&2
到供给的参数的值开始处理的目录名。
如果只有1被提供时,它是文件名,因此处理它线由行和START“在第一组的报价与窗口名称”最小化的新方法/min
和与所述数据执行该同批从依次文件的每一行,然后通过转到:eof
(结束文件 - 内置到CMD)完成
子过程都具有2个参数(例如BCBSRI-01849357 2011-12-19_BCBSRI-01849357
),所以处理前进到:name
。这将运行一个for /r
循环,从指定的源的目录,与来自第一塔+ *
指定的名称,并执行:process
传递发现作为参数1
:process
套changeme
到所讨论的文件名的文件名,通过去除计算endpart
字符串filename1
从changeme
这将提供呃,结束部分。
然后只需将提供的文件名重命名为endpart
计算的替换名称+。
为了测试目的,所需的REN命令仅仅是ECHO
。 验证命令是否正确后,将ECHO(REN
更改为REN
以实际重命名文件。
暂停只是让建议的变化被看到。处理完成后,将PAUSE
更改为EXIT
。
AAMOI,运行
*batchname* STWP01_00669094 BCBSRI-01849369
例如,将执行递归重命名从STWP01_00669094 *到BCBSRI-01849369 *
可悲的是, “不走运” 是没有意义的。
我对指示做了轻微的改动。测试后PAUSE
应更改为EXIT
。
测试后,ECHO(...
行应成为
REN "%~1" "%filename2%%endpart%"
其实际执行的重命名。如果您刚删除该行,则会解释不可见结果。
恢复原始代码并通过小代表性伪子树进行验证后,更改echo(...
行并再次测试。文件名应该更改。如果不是,那么某件事是非常错误的。不用说,这对我来说非常满意...
然后再试一次,PAUSE
更改为EXIT
。这一次,生成的窗口将显示在任务栏上,然后在输入文件的该行重命名完成时消失。例如BCBSRI-01849357 rentwo
会发生一次 - 每个文件rename
都不会发生一次。
硬编码的文件名,删除行
IF NOT DEFINED filename1 GOTO :EOF
并更换
FOR /f "usebackqdelims=" %%a IN ("%filename1%") DO START /min "ren %%a" "%~f0" %%a
与
FOR /f "usebackqdelims=" %%a IN ("YOURFILENAMEHERE") DO START /min "ren %%a" "%~f0" %%a
对于 “运行从这里” 命令,改变
SET "sourcedir=U:\sourcedir"
到
SET "sourcedir=."
.
意味着 “当前目录”
如果你把thisbatchfilename.bat到任意目录上您PATH那么你可以简单地通过执行thisbatchfilename运行程序。
您可以在提示符下输入
path
显示你的路径。 PATH是如果在当前目录中找不到可执行文件,Windows搜索的目录序列。为了提供路径,谷歌“改变路径窗口” - 有经验的批处理程序在批处理文件的路径上创建一个单独的目录。有时,他们将目录命名为“钟楼”。
你有没有考虑过PowerShell?如果你有系统的重命名方式,那么你可以在PowerShell脚本中编写它,如果你可以提供实际的文件名和它应该重命名为csv文件的名字,那么PowerShell脚本可以实现它。 如果您给我们举例说明如何重命名它,那么可能有人可以给你一些代码。 – Junaid
查看[这个答案](http://stackoverflow.com/questions/8397674/windows-batch-file-looping-through-directories-to-process-files/8398621#8398621)为另一种更简单的方法来做到这一点... – Aacini