如何在批处理文件中批量重命名具有多个点的文件?

时间:2014-07-04 09:28:21

标签: batch-file rename dos

我有以下文件夹结构:

C:\Database
C:\Database\Tables
C:\Database\Stored Procedures
C:\Database\Views
C:\Database\Functions

每个表格存储过程视图功能文件夹中都会有大量文件格式如下:

表格文件夹下:

dbo.Table1Name.Table.sql
dbo.Table2Name.Table.sql
mon.Table3Name.Table.sql
test.Table4Name.Table.sql

存储过程文件夹下:

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

同样适用于观看功能

Tables 文件夹下的文件将重命名为:

dbo.Table1Name.sql
dbo.Table2Name.sql
mon.Table3Name.sql
test.Table4Name.sql

存储过程文件夹下的文件名将为:

dbo.usp_StoredProcedure1Name.sql
dbo.usp_StoredProcedure2Name.sql
dbo.usp_StoredProcedure3Name.sql
mon.usp_StoredProcedure4Name.sql
mon.usp_StoredProcedure5Name.sql

理想情况下,我在数据库文件夹中有一个批处理文件,用于重命名删除 StoredProcedure <的文件/ strong>, 查看 功能 ,从各自文件夹中的文件名称开始。

如果在批处理文件中无法轻松完成,我会尝试在PowerShell中找到一些东西。

感谢Alex K编辑我的原始帖子(我的第一篇文章)并感谢foxidrive为您的推荐和KnightWhoSayNi分享您的方式。

3 个答案:

答案 0 :(得分:0)

在您更新之前

我写了小批量脚本。

离。

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

重要提示:在包含文件的文件夹中创建批处理脚本

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%

答案 1 :(得分:0)

启动此功能,屏幕上会显示display the ren commands 如果是,则删除echo并再次运行以执行重命名。

@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

答案 2 :(得分:0)

不需要批处理脚本。可以在命令行上使用简单的REN命令完成! : - )

for %F in (Tables "Stored Procedures" Views Functions) do @ren "C:\Database\%~F\*.*.*.sql" "????????????.??????????????????????????????.sql"

确保至少有?与最长源文件名中的字符一样多。

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

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

@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?以获取有关上述解决方案工作原理的帮助。