2010-05-30 127 views
0

请原谅我,如果这也不是问这些问题的地方,我是批处理和脚本的新手,并且对这些帖子有点新...移动和重命名文件,保留扩展名,但在批处理文件中包含子目录

我有一个将接收文件和文件夹的文件夹,我想运行一个脚本来查看目录并以数字方式重命名每个子文件夹中的所有文件,并在可能的情况下移动它们。

例如,我有东西,看起来像下面

Recieved_File_Folder 
    |_folder1 
    | |_file1.txt 
    | |_file2.bmp 
    |_folder2 
    | |_file4.exe 
    | |_file5.bmp 
    |__file9.txt 
    |__file10.jpg 

我想可以看看在每一个目录,并将其移动到这样的事情,记住文件的名称将是随机,我也想保持扩展完整。

Renamed_Folder 
    |_folder1 
    | |_1.txt 
    | |_2.bmp 
    |_folder2 
    | |_1.exe 
    | |_2.bmp 
    |__1.txt 
    |__2.jpg 

我已经花了很多时间在这个,并没有做得太好,任何帮助将非常感谢!先谢谢你!

回答

1

这个小脚本应该做的伎俩:

@ECHO OFF 

SETLOCAL ENABLEDELAYEDEXPANSION 

FOR /F "tokens=1 delims=" %%A IN ('DIR /B /S /A:D') DO (

    SET /A FILE_COUNTER=1 

    FOR /F "tokens=1 delims=" %%B IN ('DIR /B /A:-D "%%A"') DO (
     CALL :RENAME "%%A%%B" !FILE_COUNTER! 
     SET /A FILE_COUNTER=FILE_COUNTER+1 
    ) 
) 

ENDLOCAL  
GOTO :EOF  

:RENAME 

SET OLD_PATH="%~f1" 
SET NEW_FILE_NAME="%2%~x1" 
REN %OLD_NAME% %NEW_NAME%  
GOTO :EOF 

小心为脚本中使用也不会要求确认,所以看出来你来自哪里下手吧!

它是如何工作:

  • 第一FOR -loop列出了所有的子目录递归,从当前目录(使用DIR /B /S /A:D),并通过传递到循环体的完整路径可变%%A
  • 在第一环体
  • 可变FILE_COUNTER设置为1
  • 的值的第二(内) FOR -loop列出所有文件由外环(使用DIR /B /A:-D "%%A")传递的目录,并在内部循环体的子过程:RENAME通过经由可变%%B
  • 文件的完整路径,它的身体被称为具有完整的文件命名当前FILE_COUNTER值作为它的参数
  • :RENAME子例程使用它的参数,以形成新的文件名并发出一个重命名命令REN
  • 子例程返回之后,电流FILE_COUNTER值被加一(SET /A FILE_COUNTER=FILE_COUNTER+1
+0

Frank, 非常感谢!我没有使用你写的确切代码,尽管我使用了它的大部分,它已经帮助了很多! 非常有用,非常感谢您花时间为我写这篇文章,非常感谢。 – Ser1esII 2010-06-01 00:45:48

+0

不客气。如果您认为答案可以解决您的问题或对您有用,那么接受它就很好(标记标题下面的chekbox)。 – 2010-06-01 07:24:51

相关问题