![ファイル名からフォルダ名を抽出し、そのフォルダにファイルを移動する BAT ファイル](https://rvso.com/image/1451250/%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E5%90%8D%E3%81%8B%E3%82%89%E3%83%95%E3%82%A9%E3%83%AB%E3%83%80%E5%90%8D%E3%82%92%E6%8A%BD%E5%87%BA%E3%81%97%E3%80%81%E3%81%9D%E3%81%AE%E3%83%95%E3%82%A9%E3%83%AB%E3%83%80%E3%81%AB%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E7%A7%BB%E5%8B%95%E3%81%99%E3%82%8B%20BAT%20%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB.png)
私は Windows の bat ファイル プログラミングにあまり詳しくないので、この点についてご助力いただければ幸いです。
以下のことを実行するには bat ファイルが必要です。
- ファイル名からフォルダー名を抽出します。たとえば、ファイル名「123-Chemistry-101.rep」から Chemistry を抽出します。トークンの開始と終了を示すために「-」を使用できます。
- 同じファイルを Chemistry というフォルダに移動します。Chemistry はすべてのレポートが保存されているサブディレクトリになります。
おそらく、その 2 番目の部分 (このサイトで見つけたもの) は実行できると思いますが、最初の部分は私のスキルを超えています。
たとえば、/RU:\Test %%f を (*.rep) にコピーする場合は、%%f U:\test\Chemistry\ をコピーします。
よろしく、デュランド
答え1
を要求されましたが、今日ではそのようなタスクには少し時代遅れだと思うので、あなたのシステムが をサポートしていることを願ってBatch
、 で回答します:Powershell
Batch
Powershell
$rootDir = "U:\Test"
$files = Get-ChildItem $rootDir -Filter *.rep
foreach($file in $files) {
$folder = $file.toString().split("-")[1]
$sourcefile = "$rootDir\$file"
$targetdir = "$rootDir\$folder"
if(!(Test-Path -Path $targetdir )){
New-Item -ItemType directory -Path $targetdir
}
Move-Item $sourcefile $targetdir
}
編集 @Karan:
再帰的(サブディレクトリツリーを保持):
$rootDir = "U:\Test"
$files = Get-ChildItem $rootDir -Filter *.rep -Recurse
foreach($file in $files) {
$sourcefile = $file.Fullname
$filepath = $file.PSParentPath
$newfoldertocreate=$file.toString().split("-")[1]
if(!(Test-Path -Path $filepath\$newfoldertocreate)){
New-Item -ItemType directory -Path $filepath\$newfoldertocreate
}
Move-Item $sourcefile $filepath\$newfoldertocreate
}
答え2
このバッチファイルを親フォルダから実行しますレポートフォルダ:
for /f "delims=" %%a in ('dir /b /s "Reports folder\*.rep"') do for /f "tokens=2 delims=-" %%i in ("%%~a") do (
if not exist "%%~dpa%%i\" md "%%~dpa%%i"
move "%%~a" "%%~dpa%%i\"
)
%%aと%%iは2つの変数で使用されますのためにループします。前者には .REP ファイルへの完全なパスが含まれます (外側のループによります)。後者にはファイル名から抽出されたフォルダー名が含まれます (内側のループによります)。
for /?
興味のある人は、さらに詳しいヘルプを得るために、次のものを調べる必要があります (バッチ ファイルでは % 記号が 2 つになっていることに注意してください)。
%~I - expands %I removing any surrounding quotes (")
%~dI - expands %I to a drive letter only
%~pI - expands %I to a path only
では、「%%~dpa%%i」とはどういう意味でしょうか?ディレクトリコマンドは です"C:\Reports folder\123-Chemistry-101.rep"
。
%%~dpaは、ファイルのドライブ文字とパスから引用符を除いたもの、つまり を意味しますC:\Reports folder\
。
%%私上で述べたように、これはファイル名から抽出されたフォルダー名 (2 つのハイフン区切り文字の間にあるもの) なので、この場合はChemistry
.
すべてをまとめると、このファイルの場合、「%%~dpa%%i」は に展開されます"C:\Reports folder\Chemistry"
。これは、ファイルを移動したい場所だからです。