我有一个输入目录和一个输出目录。
我的主要目标是将具有一定扩展名的输入目录中的所有文件读入数组中。
然后,我希望在输入目录的输出目录下创建每个文件的目录树。
例如:
C:\Input 输入目录=
C:\Output =输出目录
输入目录树:
C:\Input\1\first.bat
C:\Input\2\3\second.bat
C:\Input\2\3\4\third.bat
C:\Input\3\1\forth.bat
我希望现在没有文件和文件夹的输出树如下所示:
输出目录树:
C:\Output\1\
C:\Output\2\3\
C:\Output\2\3\4\
C:\Output\3\1\
我有以下代码:
用于创建文件数组的:
set k=0
for /f "eol=: delims=" %%F in ('dir /b /s %InputDir%\*.%StandardExtension%') do (
set /a k+=1
set filesArray[!k!]=%%F
)
set n=%k%为每个文件创建目录:
for /l %%i in (1,1,%n%) do (
set CurrentFile=!filesArray[%%i]!
call :CheckAndCreateDirectory %SequencesDir% !CurrentFile! %OutputDir% UpdatedOutputDir
),最后,创建目录的函数:
:CheckAndCreateDirectory
set IntputDir=%1
set CurrentDir=%~dp2
set OutputDir=%3
set UpdatedOutputDir=!CurrentDir:%IntputDir%=%OutputDir%!
set %4=%UpdatedOutputDir%
if not exist %UpdatedOutputDir% (^
echo. & ^
mkdir %UpdatedOutputDir% & ^
echo.)事情是这样的:如果输入(我猜输出也是)不包含任何像&等“特殊”字符,代码就能工作。但是,如果是这样,则不会创建目录树。
C:\Input_Dir 工作输入:
不工作输入的:
有什么想法吗?
发布于 2013-02-14 11:05:47
我想我给你一个更简单的解决方案:
xcopy /T c:\input c:\ouptut一些细节:
/T创建文件夹结构,但不复制文件。不包括空文件夹或子文件夹。/T /E将包括空文件夹和子文件夹。
发布于 2013-02-14 11:30:05
Kaysax的解决方案看起来不错,但要回答您最初的问题:
总是使用延迟扩展。
并尝试将你的论点用引号括起来,如
mkdir "!UpdatedOutputDir!"关键是,延迟扩展可以毫无问题地处理所有特殊字符。
剩下的唯一问题是在循环中,因为在文件或路径名中可能会丢失感叹号!,因为FOR-循环参数是在延迟的展开过程之前展开的。
要解决这个问题,还需要付出更多的努力。
https://stackoverflow.com/questions/14872709
复制相似问题