1

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

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

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。此外,不仅有销售报告,还有许多其他报告。

我希望我很清楚。

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

4

2 回答 2

0

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

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
于 2012-11-23T19:53:43.027 回答
0

此脚本将确保它仅尝试移动符合模式 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"
)

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

于 2012-11-23T20:15:54.417 回答