重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

バッチファイルで以下のファイル操作を行いたいです。よろしくお願いします。

■概要
テキストファイルに書かれているファイルのフルパスの途中のフォルダ名を取得して変数にしたい。
その変数のフォルダを作成し、そのフォルダにファイルをコピーしたい。
■詳細
テキストファイル内容例
 L:\tmp\ope\あああ\Proc\Prog000\Nordet.bbt
 L:\tmp\ope\あああ\Proc\Prog001\Nordet.bbt
 L:\tmp\ope\いいいい\Proc\Prog000\Nordet.bbt
 L:\tmp\ope\いいいい\Proc\Prog001\Nordet.bbt

 上記の各行末から1つ目と3つ目のフォルダ名を取得する。
  1つ目:「あああ」「いいいい」など
  3つ目:「Prog000」「Prog001」

 L:\tmp\ope\XXXX までは変化する。
 Proc は固定。
 ProgXXX は連番(文字数固定)。
 Nordet.bbt は固定。

任意のフォルダにフォルダ「あああ」を作成し、Nordet.bbtをProg000-Nordet.bbt という名称で
「あああ」にコピーする。これを各行で行う。

■試したこと(断念・・・中途半端です。)
for /f %%i in (list.txt) do (set PROC="%%i":~-19,-12% ←ProgXXX の取得
                            ) ←XXXX の取得

よろしくお願いします。

A 回答 (1件)

以下のような感じでしょうか。



パスやファイル名に「%」が含まれる場合には対応していませんので、ご注意ください。

――――――――――――――――――――――――――――

@echo off

set "OutputDir=C:\コピー先フォルダ"

if not exist "%OutputDir%" md "%OutputDir%"

for /F "delims=" %%a in (list.txt) do (
call :Sub1 "%%a"
)

exit /b

:Sub1
set "FilePathTemp=%~1"
set "FilePath=%FilePathTemp:^^=^%"
set "FileNameTemp=%~nx1"
set "FileName=%FileNameTemp:^^=^%"
set "Dir1PathTemp=%~dp1"
set "Dir1Path=%Dir1PathTemp:^^=^%"
pushd "%Dir1Path%"
set "Dir1Path=%CD%"
call :Sub2 "%DIR1Path%"
exit /b 2

:Sub2
set "Dir1NameTemp=%~nx1"
set "Dir1Name=%Dir1NameTemp:^^=^%"
pushd "..\"
call :Sub3 "%CD%"
exit /b 2

:Sub3
set "Dir2NameTemp=%~nx1"
set "Dir2Name=%Dir2NameTemp:^^=^%"
pushd "..\"
call :Sub4 "%CD%"
exit /b 2

:Sub4
set "Dir3NameTemp=%~nx1"
set "Dir3Name=%Dir3NameTemp:^^=^%"
pushd "..\"
if not exist "%OutputDir%\%Dir3Name%" md "%OutputDir%\%Dir3Name%"
copy /b "%FilePath%" "%OutputDir%\%Dir3Name%\%Dir1Name%-%FileName%"
exit /b 2

――――――――――――――――――――――――――――
    • good
    • 0
この回答へのお礼

ありがとうございました。求める結果が得られました。
どのような処理をしているのか、じっくり勉強させていただきます。

お礼日時:2017/04/21 01:19

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!