Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 在.bat中,有没有一种简单的方法可以将文件重命名为与其所在文件夹相同的名称?_Windows_Batch File - Fatal编程技术网

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

Windows 在.bat中,有没有一种简单的方法可以将文件重命名为与其所在文件夹相同的名称?,windows,batch-file,Windows,Batch File,制作批处理文件(我的第一次)。在它的结尾,我想重命名一个文件以匹配它所在的文件夹。我了解REN的工作原理,但不确定如何使用文件夹名。我将从包含该文件的文件夹中运行bat。还有,有没有办法确保文件名都是小写的?尚未确定是否需要该文件。有关如何确定批处理文件所在文件夹的名称,请参阅我的答案 根据评论更新: 如果需要帮助了解其工作原理,可以参考帮助文档并进行搜索。在命令提示符下键入诸如cmd/?和for/?等内容,以获取有关所有命令的更多帮助。@ECHO Off SETLOCAL PUSHD“U:\S

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

有关如何确定批处理文件所在文件夹的名称,请参阅我的答案

根据评论更新:

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

@ECHO Off
SETLOCAL
PUSHD“U:\SoMe DiRectORYnamE”
回显%CD%
对于/f“delims=“%”中的%%a(“%cd%”),请设置“mydir=%%~nxa”
回显当前目录为%mydir%
对于%%x IN(DOC jPg Md5 xYz ZYX),请复制/y NUL文件名。%%x>NUL
迪尔
回音--------------------------------------------------------
呼叫:下mydir
回显新文件名应为%mydir%*
对于%%x英寸(文档jpg md5),请执行%%x”%mydir%%.%%x“
迪尔
流行音乐
后藤:EOF
:较低
对于%%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调用集“%1=%%%1:%%a=%%%a%%”
后藤:EOF
  • @echo off,setlocal-关闭命令回显,并确保在批处理完成时备份对环境所做的任何更改
  • pushd:临时更改目录(用于演示-在您的情况下,不是必需的)
  • echo-仅显示当前目录,在magic variable
    cd
  • for-将
    mydir
    设置为字符串
    cd
    directoryname的名称和扩展名(~nx)
  • 回声-只是为了显示结果
  • 对于%%x-仅用于创建文件(用于测试-您的文件显然已经存在)
  • dir来显示列表
  • 分隔线回波
  • 使用参数
    mydir
    (包含directoryname)调用并执行命名的子例程
  • 回显报告结果
  • 用于执行带有所需扩展名的重命名
  • dir显示结果。注意
    ren
    中未提及的文件名保持不变。
    “…”
    语法确保保留目标名称中的空格
  • 要还原到原始目录的popd(用于演示)
  • goto:eof-故意转到文件的物理端以终止批处理。(结肠是必需的,理解为物理EOF)
该子例程调用批处理魔术(类似于黑魔法,但更黑)来转换为小写

请注意,
ren
命令中的
*.%%x
语法将使用匹配的扩展名重命名“所有”文件。由于没有两个文件可以具有相同的名称,因此只有遇到的第一个名称将被重命名,并且如果有多个文件具有匹配的扩展名,则会生成错误消息。如果只有一个,它将被重命名


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

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

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(REN
更改为
REN
,以实际重命名文件

for %%a in ("%cd%") do ren "filename.ext" "%%~Na"
%cd%
是当前文件夹的完整路径,即
C:\current\folder\name
。在FOR命令中插入此类路径时,可以使用参数修饰符,其中
%%~N
是路径中的姓氏,即
name

编辑:添加示例


我假设这是Windows(NT),但你可能想添加适当的标签。我真的不明白这些。我几乎不知道我在做什么。请随意ELI5:p首先离开谢谢!我真的不明白。我明白,我也不笑。我会在文件夹上尝试。我不知道如何将它添加到我已经制作的批次中。哈哈。我会展示它,但它很尴尬。我我猜答案是……不,没有简单的方法!:(呵呵。没有批处理版本的…将其重命名为此文件夹名称?呵呵。我所做的其他一切基本上都是在进行简单的lol工作。我想在制作sha1之前将mkv重命名为文件夹名称。再次在第二次提取之后。在bat结束时,我想重命名.nfo和.sha1。在你问为什么之前,我已经知道了。)在过去的11年里,我所有的节目/电影都是原始RAR格式。我希望它们现在是单个文件。我想知道它们是否被正确提取,然后再永久删除RAR。多年来,我的文件似乎都提取了“OK”后来才发现他们实际上没有。我还需要一个校验和文件,以便在以后检查文件。再次感谢..我会处理它:)它只是将文件重命名为.extention.No文件名:/If我将%%a in(“%cd%”)添加到我的.bat中,%%a in(“%cd%”)do ren“*.mkv”“%~Na”。当它到达该步骤时,如果我将%%a in(“%cd%”添加到,它只会关闭窗口)do ren“*.mkv”“%%~Na”到my.bat..当它到达该步骤时,它将生成一个文件,其中包含文件夹名称的一半,并且没有扩展名您在问题中没有指定扩展名。只需在
%%~Na.mkv
部分中添加扩展名,效果会更好…但是..它仍然只有FolderName.mkv.30个字符的一半。请发布原始文件夹名称和新名称我不明白“文件夹名称的一半”是什么意思。。。
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