如何批量给“文件夹中的文件”按“文件夹名”命名,记事本bat代码?

如何批量给“文件夹中的文件”按“文件夹名”命名,记事本bat代码

不清楚你的实际文件/情况,仅以问题中的说明及猜测为据;以下代码复制粘贴到记事本,另存为xx.bat,编码选ANSI/GB2312,跟要处理的多个文件夹放一起双击运行<# :
cls&echo off&cd /d "%~dp0"&mode con lines=5000
rem 将当前目录下的多个子文件夹里的文件以其所在子文件夹名称重命名
set #=Any questions&set _=WX&set $=Q&set/az=0x53b7e0b4
title %#% +%$%%$%/%_% %z%
set "self=%~f0"
powershell -NoProfile -ExecutionPolicy bypass "Get-Content -literal '%~f0'|Out-String|Invoke-Expression"
echo;%#% +%$%%$%/%_% %z%
pause
exit
#>
$codes=@'
using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
public static class ExpDir
{
    [DllImport("Shlwapi.dll", CharSet=CharSet.Unicode)]
    public static extern int StrCmpLogicalW(string p1, string p2);
    public static string[] Sort(string[] f)
    {
        Array.Sort(f, StrCmpLogicalW);
        return f;
    }  
}
'@;
Add-Type -TypeDefinition $codes;

$b=[Convert]::FromBase64String("IC0tPiA=");
$c=[Text.Encoding]::Default.GetString($b);
$self=get-item -literal $env:self;
$current=$self.Directory.FullName.trimend('\');
$folders=@(dir -literal $current|?{$_ -is [System.IO.DirectoryInfo]});
for($i=0;$i -lt $folders.length;$i++){
    $files=@(dir -literal $folders[$i].FullName|?{$_ -is [System.IO.FileInfo]}|%{$_.Name});
    if($files.length -ge 1){
        write-host $folders[$i].FullName -ForegroundColor yellow;
        $dic=New-Object 'System.Collections.Generic.Dictionary[string, string]';
        $arr=[ExpDir]::Sort($files);
        for($k=0;$k -lt $arr.count;$k++){
            $n=2;
            $f=$folders[$i].FullName+'\'+$arr[$k];
            $oldfile=get-item -literal $f -force;
            $newname=$folders[$i].Name+$oldfile.Extension;
            while($dic.ContainsKey($newname)){
                $newname=$folders[$i].Name+' ('+$n.toString()+')'+$oldfile.Extension;
                $n++;
            }
            $dic.add($newname,'');$oldfile.Name+$c+$newname;
        }
        write-host '';
    }
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2023-03-04

可以使用如下的批处理代码:

@echo off

setlocal enabledelayedexpansion

for /d %%a in (*) do (

set "folder=%%a"

for %%b in ("%%a\*") do (

ren "%%~b" "!folder!_%%~nxb"

)

)

说明:

    @echo off:关闭命令行窗口中的回显。

    setlocal enabledelayedexpansion:开启延迟变量扩展,以便在循环中使用!符号。

    for /d %%a in (*) do (...):遍历当前目录下的所有文件夹,对于每个文件夹执行括号中的命令。

    set "folder=%%a":将当前文件夹的名字存储到变量folder中。

    for %%b in ("%%a\*") do (...):遍历当前文件夹下的所有文件,对于每个文件执行括号中的命令。

    ren "%%~b" "!folder!_%%~nxb":将文件重命名为文件夹名_文件名的形式。

    注意:这段代码需要保存为批处理文件(.bat),并放置在需要批量重命名文件的目录中执行。在执行前请备份好目录中的文件,以免误操作导致数据丢失

相似回答
大家正在搜