Windows批处理-根据文件名将文件移动到文件夹&;延伸

Windows批处理-根据文件名将文件移动到文件夹&;延伸,windows,batch-file,Windows,Batch File,我是批处理文件的新手,虽然我已经彻底搜索并找到了具有类似主题的主题,但没有涵盖我确切需要的内容 背景故事: 我有一个excel文件,保存后会生成两个文件,一个.PDF文件和一个.xlsm文件。这些文件保存到“待处理”文件夹中 它们使用以下命名约定命名:Company name-Date,例如“Daves pipeoping-01-08-13.xlsm” “Daves Pimping-01-08-13.pdf” 处理: 每周一次,我手动将这些文件按公司名称移动到单独命名的文件夹中,例如C:/doc

我是批处理文件的新手,虽然我已经彻底搜索并找到了具有类似主题的主题,但没有涵盖我确切需要的内容

背景故事: 我有一个excel文件,保存后会生成两个文件,一个.PDF文件和一个.xlsm文件。这些文件保存到“待处理”文件夹中

它们使用以下命名约定命名:Company name-Date,例如“Daves pipeoping-01-08-13.xlsm” “Daves Pimping-01-08-13.pdf”

处理: 每周一次,我手动将这些文件按公司名称移动到单独命名的文件夹中,例如C:/documents/sales/excel/daves/ C:/dociuments/sales/pdf/daves Pimping/

我很感激公司名称中的空格没有帮助,但希望我们可以使用-作为分隔符

最终,我希望创建一个批处理文件,该文件将通过单步遍历文件夹中的文件、读取公司名称并根据名称和扩展名将每个文件移动到相关文件夹来自动化上述处理

当我决定处理时,我可以在任何时候在文件夹中保存50个以上的文件

非常感谢您在这方面的帮助,我希望我已经提供了足够的信息,看看这是否可行

非常感谢,, 灰烬

p、
作为旁注,我假设我不能在移动PDF文件之前将其作为电子邮件附件发送?e、 g执行批处理文件,通过电子邮件将PDF发送到预定义的电子邮件地址,然后将“PDF”和“xlsm”移动到相关文件夹。这并不重要,只是好奇批处理的功能。

编辑以使用不同的目标文件夹。如果计划在同一文件夹中使用批处理文件名,请不要在批处理文件名中使用
-

试试这个。它使用文件名中的第一个字符作为分隔符,删除最后一个空格字符,如果需要,则创建一个目录,并将文件移动到相应的文件夹中

文件名包含!%可能是个问题

@echo off
cd /d "c:\To-Process"
setlocal enabledelayedexpansion
for %%a in (*-*.*) do (
   for /f "delims=-" %%b in ("%%a") do (
     set "f=%%b"
       if /i "%%~xa"==".pdf" (
         md "C:/documents/sales/pdf/!f:~0,-1!" 2>nul
         move "%%a" "C:/documents/sales/pdf/!f:~0,-1!" >nul
       )
       if /i "%%~xa"==".xlsm" (
         md "C:/documents/sales/excel/!f:~0,-1!" 2>nul
         move "%%a" "C:/documents/sales/excel/!f:~0,-1!" >nul
       )
   )
)
有批处理/VBS脚本可用于发送电子邮件和附件。

谷歌搜索,或使用
Blat
Sendmail

嗨,谢谢你的回复,我会测试一下,让你知道我的进展。我最初注意到的一件事是,我们没有设置目标文件夹。理想情况下,需要两个基于扩展名的单独文件夹…:)批处理文件查看的是文件夹名而不是文件名,因此在运行时,会创建文件夹“C:/to Process/t”(至于处理,分隔为-then减去上一个'o',留下T..谢谢,AshI编辑它以使用不同的文件夹。它不解析
c:\To process
,因为一个简单的for循环不会返回文件夹信息,但我也省略了定义新文件夹的起始编号,所以它只使用了最后一个字符。这很有效。)真的,非常感谢你。你帮我节省了很多工作时间。传奇。