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 に答える