Board logo

标题: [文件操作] 如何将下级文件夹合并到上级,并在上级文件夹名称后面加上下级文件夹名? [打印本页]

作者: vicky_ive    时间: 2018-11-16 16:24     标题: 如何将下级文件夹合并到上级,并在上级文件夹名称后面加上下级文件夹名?

本帖最后由 pcl_test 于 2018-11-22 03:53 编辑

批处理如何将下层文件夹名提取到上层,并在两者之间加符号?
现在目录下所有的文件夹下都只有一个文件夹,我现在想把子文件夹的名字提取到上层,并加一个“-”。
比如第一层文件夹叫“1234”,第二层叫“5678”,运行后,第一层文件夹的名字变成“1234-5678”,其他不变。下面的这个程序无法实现加符号的功能。
不知道如何实现加符号呢~谢谢各位大侠!
  1. @echo off
  2. for /f "delims=" %%a in ('dir /a:d /b') do (
  3. for /f "delims=" %%b in ('dir /a:d /b "%%~a"') do (
  4. echo %%a
  5. echo %%b
  6. move "%%~pa\%%~na\%%b" "%%~pa\%%~na%%~nb"
  7. )
  8. rd /s /q "%%a"
  9. )
复制代码

作者: xp3000    时间: 2018-11-16 19:32

最后一个%%~na之间应该有个内容的,添加这里看看%%~nb

move "%%~pa\%%~na\%%b" "%%~pa\%%~na-%%~nb"
作者: zuodx    时间: 2018-11-17 15:36

use strict;

opendir ( DIR , ".") or die 'Open dir failed\n';
my @dirlist = readdir(DIR);
closedir DIR;

my @dir = grep { -d  and  not m/^\./} @dirlist;
#print "$_\n" for @dir;

for my $u (@dir){
        opendir (DIR , $u)        or die "Open dir $u failed\n";
        my @dl = readdir(DIR);
        closedir DIR;
       
        @dl =  grep {  not m/^\./} @dl ;
       
        $_ = "${u}\\${_}" for @dl;
       
        ##print "${_} ++\n" for @dl;
       
        my @dll = grep { -d  } @dl ;
        #print "$_\n"  for @dll;
        my $newdir = @dll[0];
        $newdir =~ s/\\/-/;
        #print "$newdir\n";
        rename  $u , $newdir;
}
作者: xczxczxcz    时间: 2018-11-17 15:45

楼上的  不会吧,要这么复杂?
作者: lifei259    时间: 2018-11-18 07:57

  1. @echo off
  2. for /f "delims=" %%a in ('dir /ad /b') do (
  3.     for /f "delims=" %%b in ('dir /ad /b "%%a"') do (
  4.          ren "%%~sa" "%%~na-%%~nb"
  5.     )
  6. )
  7. pause
复制代码





欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2