首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在批处理文件中用多个点对文件进行批量重命名?

如何在批处理文件中用多个点对文件进行批量重命名?
EN

Stack Overflow用户
提问于 2014-07-04 09:28:21
回答 3查看 3.4K关注 0票数 2

我有以下文件夹结构:

代码语言:javascript
复制
C:\Database
C:\Database\Tables
C:\Database\Stored Procedures
C:\Database\Views
C:\Database\Functions

在每个存储过程ViewsFunctions文件夹中都会有大量文件,其格式如下:

在“表”文件夹下:

代码语言:javascript
复制
dbo.Table1Name.Table.sql
dbo.Table2Name.Table.sql
mon.Table3Name.Table.sql
test.Table4Name.Table.sql

存储过程文件夹下:

代码语言:javascript
复制
dbo.usp_StoredProcedure1Name.StoredProcedure.sql
dbo.usp_StoredProcedure2Name.StoredProcedure.sql
dbo.usp_StoredProcedure3Name.StoredProcedure.sql
mon.usp_StoredProcedure4Name.StoredProcedure.sql
mon.usp_StoredProcedure5Name.StoredProcedure.sql

同样,对于视图、函数,也是如此。

然后将文件夹下的文件重命名为:

代码语言:javascript
复制
dbo.Table1Name.sql
dbo.Table2Name.sql
mon.Table3Name.sql
test.Table4Name.sql

然后,存储过程文件夹下的文件名为:

代码语言:javascript
复制
dbo.usp_StoredProcedure1Name.sql
dbo.usp_StoredProcedure2Name.sql
dbo.usp_StoredProcedure3Name.sql
mon.usp_StoredProcedure4Name.sql
mon.usp_StoredProcedure5Name.sql

理想情况下,我应该在数据库文件夹中有一个批处理文件,重新命名从各自文件夹中的文件名中删除TableView和Functional的文件。

如果在批处理文件中很难做到这一点,我会尝试在PowerShell中找到一些东西。

感谢亚历克斯K编辑我的原始帖子(我的第一篇文章)和感谢福克斯里夫您的推荐和KnightWhoSayNi分享您的方式。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-07-04 13:54:20

启动这个,它就会在屏幕上显示display the ren commands

如果是正确的,那么删除echo并再次运行它来执行重命名。

代码语言:javascript
复制
@echo off
for /f "delims=" %%a in ('dir "C:\Database\*.sql" /b /s /a-d ') do (
   for /f "tokens=1,2 delims=." %%b in ("%%~nxa") do echo ren "%%a" "%%b.%%c%%~xa"
)
pause
票数 1
EN

Stack Overflow用户

发布于 2014-07-04 11:14:58

更新之前的

我写了小批脚本。

例如。

代码语言:javascript
复制
asd.first.second.txt -> asd.first.txt
aaa.first.second.txt -> aaa.first.txt
bbb.first.second.txt -> bbb.first.txt
ccc.first.second.txt -> ccc.first.txt
ddd.first.second.txt -> ddd.first.txt

要点:在文件夹中创建批处理脚本和文件

代码语言:javascript
复制
ECHO OFF
SETLOCAL EnableDelayedExpansion
CLS

SET temp_file=C:\temp\temp_string.txt
FOR /f "delims=" %%A IN ('DIR /B "%~dp0"') DO (
    ECHO %%A
    ECHO %%A > %temp_file%
    FOR /F "tokens=1,2,3 delims=." %%I IN (%temp_file%) DO (
        ECHO %%I %%J %%K
        rename %%I.%%J.%%K.txt %%I.%%J.txt
    )

)
DEL %temp_file%
票数 0
EN

Stack Overflow用户

发布于 2014-07-04 15:24:25

不需要批处理脚本。它可以通过命令行上的一个简单的REN命令来完成!:-)

代码语言:javascript
复制
for %F in (Tables "Stored Procedures" Views Functions) do @ren "C:\Database\%~F\*.*.*.sql" "????????????.??????????????????????????????.sql"

只需确保至少有与最长源文件名中的字符相同的?

如果在批处理脚本中使用该命令,则加倍。

下面是使用两个REN命令的另一个简单解决方案(批处理脚本):

代码语言:javascript
复制
@echo off
for %%F in (
  Tables:Table
  "Stored Procedures:StoredProcedure"
  Views:View
  Functions:Function
) do for /f "tokens=1,2 delims=:" %%A in ("%%~F") do (
  ren "C:\Database\%A\*.*.*.sql" *.
  ren "C:\Database\%A\*.*.%%B" *.sql
)

有关理解上述解决方案为什么工作的帮助,请参见How does the Windows RENAME command interpret wildcards?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24571030

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档