在.bat中有一种简单的方法可以将文件重命名为与其所在文件夹相同的名称吗?

时间:2016-01-11 05:07:10

标签: windows batch-file

制作批处理文件(我的第一个)。在它结束时,我想重命名一个文件以匹配它所在的文件夹。我知道REN是如何工作的,但不知道如何让它使用文件夹名称。我将从包含该文件的文件夹中运行bat。另外,有没有办法确保文件名全是小写?尚未确定我是否还需要它。

3 个答案:

答案 0 :(得分:0)

请参阅In a batch file, how would I find the specific folder it is in without the rest of its directory?上的答案,了解如何确定批处理文件所在的文件夹名称。

每条评论更新:

如果您需要帮助来了解其工作原理,可以参考帮助文档和搜索。在命令提示符下输入cmd /?for /?等内容,以获取您需要更多帮助的所有命令。

答案 1 :(得分:0)

@ECHO Off
SETLOCAL
PUSHD "U:\SoMe DiRectORYnamE"
ECHO %CD%
FOR /f "delims=" %%a IN ("%cd%") DO SET "mydir=%%~nxa"
ECHO Current directory is %mydir%
FOR %%x IN (DOC jPg Md5 xYz ZYX) DO COPY /y NUL FilenamE.%%x >nul
DIR
ECHO --------------------------------------------------------
CALL :lower mydir
ECHO new filename should be %mydir%.*
FOR %%x IN (doc jpg md5) DO REN *.%%x "%mydir%.%%x"
dir

POPD

GOTO :EOF

:lower
FOR %%a IN (a b c d e f g h i j k l m n o p q r s t u v w x y z) DO CALL SET "%1=%%%1:%%a=%%a%%%"
GOTO :EOF
  • @echo off,setlocal - 关闭命令回显并确保在批处理完成后撤消对环境所做的任何更改
  • pushd:暂时更改目录(对于演示 - 在您的情况下,不是必需的)
  • echo - 只是为了显示当前目录,在魔术变量cd
  • for - 将mydir设置为字符串cd中目录名的名称和扩展名(~nx)
  • echo - 只是为了显示结果
  • for %% x - 只是为了创建文件(用于测试 - 您的文件显然已经存在)
  • dir显示列表
  • echo for a分隔线
  • 调用使用参数mydir(包含目录名)
  • 执行命名子例程
  • 回显报告结果
  • 用于执行具有所需扩展名的rename
  • 显示结果的目录。请注意ren中未提及的文件名未更改。 "..."语法确保保留目标名称中的空格。
  • 弹出以恢复到原始目录(用于演示)
  • 转到:eof-故意转到物理文件结束以终止批处理。 (冒号必需并且理解为物理EOF)

子程序调用批处理魔法(类似黑魔法,但更黑)转换为小写。

请注意*.%%x命令中的ren语法将重命名" all"在任何一种情况下,具有匹配扩展的文件。 SInce no 2文件可以具有相同的名称,只有遇到的第一个名称将被重命名,如果有多个文件具有匹配的扩展名,则会产生错误消息。如果只有一个,它将被重命名。

上述批次中的大部分都是开销,并且可能会让初学者感到困惑。

以下是三个活动行,假设当前目录包含三个目标文件,它们应该可以重命名文件。

FOR /f "delims=" %%a IN ("%cd%") DO SET "indir=%%~nxa"
FOR %%a IN (a b c d e f g h i j k l m n o p q r s t u v w x y z) DO CALL SET "indir=%%indir:%%a=%%a%%%"
FOR %%x IN (doc jpg md5) DO ECHO(REN *.%%x "%mydir%.%%x"

为了测试目的,所需的REN命令仅为ECHO在您确认命令正确后,将ECHO(REN更改为REN以实际重命名文件。

答案 2 :(得分:0)

for %%a in ("%cd%") do ren "filename.ext" "%%~Na"

%cd%是当前文件夹的完整路径,即C:\current\folder\name。在FOR命令中插入此类路径时,可以使用参数修饰符,其中%%~N是路径中的姓氏,即name

编辑已添加示例

C:\Users\Antonio\Documents\ASMB\test\Thisisthefoldernamethatsreallylong
>dir /B
AnyName.mkv
test.bat

C:\Users\Antonio\Documents\ASMB\test\Thisisthefoldernamethatsreallylong
>type test.bat
@echo off
for %%a in ("%cd%") do ren "*.mkv" "%%~Na.mkv"

C:\Users\Antonio\Documents\ASMB\test\Thisisthefoldernamethatsreallylong
>test

C:\Users\Antonio\Documents\ASMB\test\Thisisthefoldernamethatsreallylong
>dir /B
test.bat
Thisisthefoldernamethatsreallylong.mkv