【问题标题】:Using batch commands to create folders and copy filenames使用批处理命令创建文件夹和复制文件名
【发布时间】:2016-01-15 19:10:48
【问题描述】:

我想将列表中的所有文件复制到另一个位置,并根据文件名的某些属性在该位置创建子文件夹。在这种情况下,公司名称。所有文件当前都位于 desktop\main 中。

例如,假设列表具有类似的文件名

From((Sales@JonesCompany.com))main.txt
From((AR@PeterIndustries.com))main.txt
From((AP@BaseCorporation.com))main.txt

脚本应该复制这些文件,创建一个像 JonesCompany.com 这样的目录,最后将所有相应的文件名复制到该位置。

最终结果应该是这样的

desktop\final_location\JonesCompany\
desktop\final_location\PeterIndustries\
desktop\final_location\BaseCorporation\

目前为止

for /f "delims=" %%i in (main.txt) do echo F|xcopy "C:\Users\Desktop\Main\%%i" MD %%i "C:\Users\Desktop\final_location\%%i" /i /z /y

提前致谢

【问题讨论】:

    标签: batch-file scripting


    【解决方案1】:

    认为这就是你想要的:

    @ECHO OFF
    SETLOCAL
    set "basepath=C:\Users\Desktop\Main\"
    set "filter=*.txt"
    set "targetpath=C:\Users\Desktop\final_location\"
    echo scanning %basepath%%filter%
    for %%i in ("%basepath%%filter%") do (
        for /F "tokens=1,2,3 delims=@)" %%a in ("%%i") do (
            echo Creating Folder %%b...
            mkdir %basepath%%%b\
            echo copying file %%i to %targetpath%%%b\...
            copy "%%i" %targetpath%%%b\
        )
    )
    

    您可以根据需要轻松更改basepathtargetpathfilter 变量。

    说明 最棘手的部分是for /F "tokens=1,2,3 delims=@)" %%a in ("%%i") do (%%i 是一个文件名。假设它是From((Sales@JonesCompany.com))main.txt。这个for 语句将在分隔符@) 的任何实例处拆分字符串。这给我们留下了以下字符串数组:

    1. %%a:“来自((销售)”
    2. %%b: "JonesCompany.com"
    3. %%c: NULL(我认为)
    4. %%d: "main.txt"

    显然,我们想要%%b,所以我们使用它作为新的文件夹名称。然后我们将原始完整路径%%i 复制到新文件夹中。

    update 删除了一个循环,感谢@Stephan 指出了一些我没有意识到的事情!

    【讨论】:

    • 我刚刚意识到我忽略了有关列表的部分。这个答案只是从 /main/ 目录中读取所有文件名。根据您的示例代码,如有必要,您应该能够将其调整为列表。
    • delims=)) ?分隔符只能是单个字符。
    • 仍然作为单个字符工作:分隔符是 )) ,而不是“两个 )
    • 没问题。你是对的,)) 的工作方式与) 完全一样,但会给未来的读者设定错误的期望。
    • 尝试在复制语句中为%%i 加上引号
    猜你喜欢
    • 2014-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-14
    • 1970-01-01
    相关资源
    最近更新 更多