首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >批处理字符串解析

批处理字符串解析
EN

Stack Overflow用户
提问于 2013-02-14 10:29:04
回答 2查看 182关注 0票数 0

我有一个输入目录和一个输出目录

我的主要目标是将具有一定扩展名的输入目录中的所有文件读入数组中。

然后,我希望在输入目录输出目录下创建每个文件的目录树。

例如:

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\

我有以下代码:

用于创建文件数组的:

代码语言:javascript
复制
    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%

为每个文件创建目录:

代码语言:javascript
复制
for /l %%i in (1,1,%n%) do (
    set CurrentFile=!filesArray[%%i]!
    call :CheckAndCreateDirectory %SequencesDir% !CurrentFile! %OutputDir% UpdatedOutputDir
)

,最后,创建目录的函数:

代码语言:javascript
复制
: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 工作输入:

不工作输入的:

有什么想法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-02-14 11:05:47

我想我给你一个更简单的解决方案:

代码语言:javascript
复制
xcopy /T c:\input c:\ouptut

一些细节:

/T创建文件夹结构,但不复制文件。不包括空文件夹或子文件夹。/T /E将包括空文件夹和子文件夹。

票数 2
EN

Stack Overflow用户

发布于 2013-02-14 11:30:05

Kaysax的解决方案看起来不错,但要回答您最初的问题:

总是使用延迟扩展。

并尝试将你的论点用引号括起来,如

代码语言:javascript
复制
mkdir "!UpdatedOutputDir!"

关键是,延迟扩展可以毫无问题地处理所有特殊字符。

剩下的唯一问题是在循环中,因为在文件或路径名中可能会丢失感叹号!,因为FOR-循环参数是在延迟的展开过程之前展开的。

要解决这个问题,还需要付出更多的努力。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14872709

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档