【问题标题】:DOS Batch file - Copy file based on filename elementsDOS 批处理文件 - 根据文件名元素复制文件
【发布时间】:2012-11-23 19:36:22
【问题描述】:

我需要根据文件名对很多文件进行排序。我想用一个批处理文件来做。我确实知道我想要什么,但我不确定语法是否正确。

我使用的文件名示例:(它们最初都在同一个目录中)

2012_W34_Sales_Store001.pdf  
2012_W34_Sales_Store002.pdf  
2012_W34_Sales_Store003.pdf  

2012_November_Sales_Store001.pdf  
2012_November_Sales_Store002.pdf  
2012_November_Sales_Store003.pdf

我想提取位于“_”符号之间的信息,并每次将它们放入不同的变量中。 _号之间所含信息的长度每次都会不同。

Example:
var1="2012"
var2="W34" (or November)
var3="Sales"
var4="001"

如果我能够做到这一点,然后我可以使用将文件复制到适当的目录

move %var1%_%var2%_%var3%_%var4%.pdf z:\%var3%\%var4%\%var1%\%var2%

它需要循环,因为我有 Store001 到 Store050。 此外,不仅有销售报告,还有很多其他的。

我希望我清楚。

请帮我实现这个批处理文件!

【问题讨论】:

    标签: variables batch-file dos filenames


    【解决方案1】:

    此脚本将确保它只尝试移动符合模式 part1_part2_part3_part4.pdf 的文件

    @echo off
    for /f "eol=_ delims=" %%F in (
      'dir /b *^|findstr /ix "[^_]*_[^_]*_[^_]*_[^_]*[.]pdf'
    ) do for /f "eol=_ tokens=1-4 delims=_." %%A in ("%%F") do (
      move "%%F" "z:\%%C\%%D\%%A\%%B"
    )
    

    如果需要,您可以在 MOVE 之前添加md "z:\%%C\%%D\%%A\%%B" 2>nul,以防文件夹可能尚不存在。

    【讨论】:

    • 你摇滚!非常感谢德本汉姆
    • 如果我想添加一个条件:如果 %%C = "Some string" and %%B lenght = 3 caracters set pathname var to something but if %%C = "相同的字符串”并且 %%B 长于 3 将路径名 var 设置为其他内容?
    【解决方案2】:

    此脚本将根据下划线之间的值将您的文件移动到类似构造的路径。

    for %%f in (*.pdf) do call :handlefile %%f
    
    :handlefile
    set pad=z:
    for /f  "delims= tokens=1,* " %%a in ("%1") do call :step %%a %%b
    rem this MOVES the file, maybe use echo first for testing
    move "%fn%" "%pad%"
    exit /B
    
    :step
    if !%2!==!! EXIT /B
    set pad=%pad%\%1
    for /f  "delims=_ tokens=1,* " %%a in ("%2") do call :step %%a %%b
    EXIT /B
    

    【讨论】:

    • 基本上,我想提取“_”之间的字符串并将它们放入变量中。这将让我使用变量将文件名移动到目录中。
    • 我的脚本将在功能上做同样的事情,而不需要 vars。
    • 是的,但我需要 vars 来对病房后的文件进行分类。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-20
    相关资源
    最近更新 更多