アプリ版:「スタンプのみでお礼する」機能のリリースについて

下記に示すディレクトリ構造から、期待結果に示すようにtxtが
置かれているフォルダの1つ前のフォルダ名のみ表示させたいです。

調べたら変数内の何文字目~何文字目までを表示させる
方法はあるようです。
しかし、それでは下記のようなにディレクトリごとに
文字数が異なる環境の場合、求めるような結果になって
くれません。

私の知識、調べ方ではどうしようもなくなってしまい、
質問させていただいた次第です。

下記ディレクトリ構造から期待結果のように表示させることは
可能なのでしょうか?

[ディレクトリ構造]
D:\共通パス\AA\BBB\111.txt
D:\共通パス\CCC\DDDDD\222.txt
D:\共通パス\EEEE\FFFFFFFFF\333.txt

[期待結果]
AA
CCC
EEEE




[補足]
環境はWin10 64bitです。

色々試行錯誤してみましたが、書けているのは下記だけです・・・。

[実行batの処理内容]
※バッチはDドラ直下に置いているものとする。
for /F "delims=" %%a in ('dir /b /s') do echo %%a

[実行結果]
D:\共通パス\AA\BBB\111.txt
D:\共通パス\CCC\DDDDD\222.txt
D:\共通パス\EEEE\FFFFFFFFF\333.txt

A 回答 (3件)

パス文字列を分割して、配列から取り出してみてはいかがですか。


例)
sample = split('\',dir);
みたいな感じで。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

ヘルプを見てみましたが、splitコマンドは
内部コマンドまたは外部コマンド、
操作可能なプログラムまたはパッチファイルとして認識されないようです。。。

お礼日時:2017/02/05 21:06

もっと良いやりかたがあるのかもしれませんが……


こんな感じ?
ただしフォルダの深さは9個?までです。

@echo off
set src=ここにDIRコマンドのパスを書く


rem DIRの出力パスを一つずつ:EACH_PATHに渡す
for /f "usebackq" %%a in (`dir %src% /b /s`) do (
call :EACH_PATH %%a
)
goto :EOF

rem -----
rem 一つのパスを分解して:EACH_FOLDERに渡す
:EACH_PATH
set arg=%1
for /f "tokens=2-10 delims= " %%a in ("%arg:\= %") do (
call :EACH_FOLDER %%a %%b %%c %%d %%e %%f %%g %%h %%i
)
exit /b

rem -----
rem 渡されたフォルダ名とファイル名のうち最後から3番目を表示する
:EACH_FOLDER
set gparent=
set parent=
set child=

:LOOP
if "%1"=="" goto :EXIT_LOOP
set gparent=%parent%
set parent=%child%
set child=%1
shift
goto :LOOP

:EXIT_LOOP
rem 出力
echo out: %gparent%
exit /b


#Win10 64bitならバッチに拘らず、PowerShellの方が楽できますよ
    • good
    • 0

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



ただ、バッチファイルの性質上、ターゲットのパスに特定の半角記号が含まれる場合の扱いが難しく、ある程度の記号には対応させましたが、「%」だけはどうしても私のスキルでは対応させられていません。

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

@echo off

for /F "delims=" %%a in ('dir *.txt /b /s') do (
call :SUB1 "%%a"
)

goto END

:SUB1
set DIR1="%~dp1"
set DIR2=%DIR1:^^=^%
pushd %DIR2%
pushd "..\"
set DIR3="%CD%"
popd
popd
call :SUB2 %DIR3%
exit /b 2

:SUB2
set DIR4="%~nx1"
set DIR5=%DIR4:&=^&%
echo %DIR5:"=%
exit /b 2

:END

pause

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

ご回答ありがとうございます。
私の求めた回答ドンピシャです!助かりました!
参考にさせていただきます!

お礼日時:2017/02/05 21:07

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