• ベストアンサー

Dosでフォルダのパスの処理

現在Dosを勉強していますが、以下のようなバッチを書いていますが、 C:\testフォルダとその下のファルダのフルー名を表示したいです。 @for /F "delims=" %%f in ('dir C:\test\* /B /S /A-D') do @( echo %%~dpf ) しかし、この書き方は、いつもフルーフォルダの名前の最後に\が入っています。 たとえば、C:\text\A\のように表示されますが、 どうやって、\を除いて、表示する文字列の最後に\をいれないようにしますか? 以上の例だと、C:\text\Aがほしいですね よろしくおねがいします。

質問者が選んだベストアンサー

  • ベストアンサー
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

「フルー名」とか「フルーフォルダ」って何だろ? さておき「DOS」といってもどれかわからんのですが, 例えば手元の Windows XP の cmd.exe では「環境変数の遅延展開」(/v:on) が有効になっている状況でコマンドラインから for /F "delims=" %f in ('dir c:\test\* /B /S /A-D') do @ (set filename=%~dpf & echo !filename:~0,-2! ) でそれっぽくなってるような気がします. 詳細は set /? あたりかな. でもこの for って, 実は for /R c:\test %f in (*) do @ (set filename=%~dpf & echo !filename:~0,-2! ) と同じことをいってるような気がする.

その他の回答 (1)

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.2

指定のフォルダー内のサブフォルダーのフルパスの一覧が欲しいのなら @for /F "delims=" %%f in ('dir C:\test\* /B /S /A:D') do @(echo %%f) でいいように思いますけど ・・・

関連するQ&A

  • DOSバッチにて外のファイルの指定行を読む

    今回、皆様の助けを頂き、DOSバッチを作成して仕事をやることができました。 感謝します。しかしながら、入出力に関して、もう少し理解したいと思います。 特に、外のファイルの指定行の内容を読み出すことはできないでしょうか? 外のファイルの最初の行を読み出す @echo off set /p abc=< c:\mylog.log echo %abc% 外のファイルの最後の行を読み出す @echo off FOR /F "delims= " %%a IN (c:\mylog.log) DO (set abc=%%a) echo %abc% ----------- DOSのHelpを調べてみましたが、 For のパラメータについて、よく理解できていません。 パラメータをうまく使えば、ファイルの指定行を読み出せる気がするのですが、 調べ切れていません。 宜しくお願いします。

  • DOSのコマンドでうまく処理が行えません

    下記のようなバッチ処理を行おうとしたのですが、なかなかうまく処理が行われず困っています。 FOR /F " %%J IN (A.TXT) DO (   SET ANS_SET=%%J   SET ANS_VAL=%ANS_SET:~0,3% IF %ANS_SET% == "SPC" (   ECHO テストA >> test.txt    ) else (    ECHO テストB >> test.txt    ) ) A.txtの内容 SPC1A1 SPC1B1 SPC2A1 SPC2B1 SPV1A1 SPV2A1 Aテストの頭三文字が"SPC"であれば、テストAの処理を、違う場合はテストBの処理を 行いたいのですが、すべてテストBの処理を行ってしまいます。 書き方がおかしいのでしょうが、どのように修正を行えばよろしいのでしょうか? %の使い方がいまいちわかりずらく困っています。 DOSの文法等、わかりやすいHP等あれば合わせて教えていただけませんでしょうか? 特に、例の構文がわかりやすく解説つきで書かれているものがあれば助かるのですが。 いろいろバッチファイルを作成していきたいのですが、なかなか例文つきのHPが 見つからなくて。 よろしくお願いいたします。 環境:Win2008serverR2

  • 【DOSコマンド】for の デリミタにダブルクォーテーションを使うには

    下記のような1行だけ書かれたテキストファイルがあり、その中からダブルクォーテーションで囲まれた部分を抜き出そうとしています。 --【abc.txt】----------------------------------------------------------- Command Line: "C:\Program Files\test\test.exe" ---ここまで------------------------------------------------------------- (C:\Program Files\test\test.exe を抜き出したい) DOSコマンドのfor文を使って抜き出そうとしたのですがダブルクォーテーションをどうやってデリミタに指定したらいいのかわかりません。   for /f 'delims=" tokens=2' %i in (test.txt) do @echo %i  とか   for /f "delims="" tokens=2" %i in (test.txt) do @echo %i など いろいろやってみたのですがエラーが出ました。 試しにテキストファイルのダブルクォーテーションを”+”に置き換えて試したところうまく出来たので、デリミタの指定の仕方だけだと思うのですが、どうしてもわかりません。 Command Line: +C:\Program Files\test\test.exe+   に対して for /f "delims=+ tokens=2" %i in (test.txt) do @echo %i はうまく出来ました。 どなたかご享受願えませんでしょうか。 よろしくお願いします。

  • バッチファイルでの%を含むファイル名の取得

    以下はEドライブを走査してフォルダごとのjpgやpngなどのファイルの数を全て表示するバッチ処理ですが。基本的に上手く動きますが%を含むファイル名、フォルダ名に当たると上手く動きません。どうしたらいいでしょうか?”ファイル名、フォルダ名に%を使うな”という回答以外でお願いします。 @echo off pushd E:\ for /f "delims=" %%j in ('dir /b /s /a:d') do call :sub "%%j" exit /b :sub echo /////////////////////////////////////////////////////////////////////////// for /f "delims=" %%x in ('dir /b %1 ^| find /c ".jpg"') do call :jpg %%x for /f "delims=" %%x in ('dir /b %1 ^| find /c ".JPG"') do call :jpg2 %%x for /f "delims=" %%x in ('dir /b %1 ^| find /c ".png"') do call :png %%x for /f "delims=" %%x in ('dir /b %1 ^| find /c ".bmp"') do call :bmp %%x echo %1 echo jpg %jpg_c% echo png %png_c% echo bmp %bmp_c% echo JPG %jpg2_c% goto :EOF :jpg set jpg_c=%1 :echo %1 goto:EOF :jpg2 set jpg2_c=%1 :echo %1 goto:EOF :png set png_c=%1 :echo %1 goto:EOF :bmp set bmp_c=%1 :echo %1 goto:EOF :all set all_c=%1 :echo %1 goto:EOF

  • DOSバッチにて外のファイルをリードする方法

    DOS batchにて、外のファイルの中身をリードしたい。 どこかのサイトにて、下記を知りました。 FOR /F "delims=" %%a IN (c:\\GTM2\myfile.txt) DO (set abc=%%a) call echo step=%abc% しかし、この方法は、ファイルの最後の行を掴んでくるもののようです。 今、小生の欲しい事柄は、ファイルの最初の行の情報を掴むことです。 宜しくお願い申し上げます。

  • msdos for文 パスに!がある時の記述の仕方

    C:\test\dataのフォルダに入っているファイルの数と 最も古いファイルのファイル名は リスト1で取得できますが、 パスに!が入っているC:\test\!dataでは、 リスト2のようにしても、for文の所で、 指定されたファイルが見つかりません。 と表示されてしまいます。 パスに!が入っている時は、 どのように記述すればよいのでしょうか。 ---リスト1------------------------------------ @echo off set folder="C:\test\data\" for /F %%a in ('dir %folder% /a:-d ^| find "個のファイル"') do set num=%%a echo ファイルは %num% 個あります。 for /F %%F in ('dir %folder% /b /o:-d') do set filename=%%F echo 一番古いファイルは %filename% です。 ---リスト1の実行結果-------------------------- ファイルは 50 個あります。 一番古いファイルは test100.txt です。 ---------------------------------------------- ---リスト2------------------------------------ @echo off set folder="C:\test\!data\" for /F %%a in ('dir %folder% /a:-d ^| find "個のファイル"') do set num=%%a echo ファイルは %num% 個あります。 for /F %%F in ('dir %folder% /b /o:-d') do set filename=%%F echo 一番古いファイルは %filename% です。 ---リスト2の実行結果-------------------------- 指定されたファイルが見つかりません。 ファイルは 50 個あります。 指定されたファイルが見つかりません。 一番古いファイルは test100.txt です。 ---------------------------------------------- (実行環境 : Windows7のコマンドプロンプト)

  • バッチファイル

    バッチファイルで cd C:\MYDOCU~1\TEST dir の2行を実行するようにしたつもりですが カレントでdirされました。 現在のバッチは @ECHO OFF cd C:\MYDOCU~1\TEST dir なんですが、どこを直せばよいですか?

  • DOSのECHOコマンドで > を表示させたい

    DOSでバッチファイルを組んでいます そこで ECHOコマンドで > を表示させたいのですが 具体的には ECHO > と打っているんですがコマンドの構文が間違っていますと出ます おそらく実行結果をファイルにするときの > になってしまっているのだと思います ECHOで > を表示させる方法は無いでしょうか? 知っている方いればお願いします

  • WindowsXP 記号チェック

    いつも大変お世話になっております。 WindowsXP SP3にて下記のバッチファイルがあります。 コード------------------------------------------------------ SETLOCAL ENABLEDELAYEDEXPANSION SET DIR_LIST=D:\TEST\FINSSTR\DIR.txt SET DIR=D:\TEST\FINSSTR\DIR SET FIND_OK_LIST=D:\TEST\FINSSTR\FIND_OK.txt SET FIND_NG_LIST=D:\TEST\FINSSTR\FIND_NG.txt Dir /s %DIR%\*.txt /b > %DIR_LIST% for /f "tokens=* " %%a in (%DIR_LIST%) do call :sub "%%a" echo "処理完了" :sub for /f "delims=" %%T in (%~1) do ( set LINE=%%T findstr "○" %~1 If !errorlevel!==0 ( echo !LINE!>>%FIND_OK_LIST% ) else ( echo !LINE!>>%FIND_NG_LIST% ) ) コード------------------------------------------------------ 該当フォルダ(サブフォルダ含む)にて 【.TXT】の拡張子で"○"の記号がファイル内にあるかをサーチする バッチを作成してみました。 ○があれば、FIND_OK_LISTに ・・・なければFIND_NG_LISTに検索対象ファイル名(フルパス付き)で それぞれ出力するバッチです。 しかし実行してもうまく稼動しません。 DIR.txtまでは作成されています。 何に問題があるのでしょうか? 他のバッチ等をCALLせず、かつVBS等も使わず バッチ1本で実現したいのですが可能でしょうか? ※何かしらのソフトで実施したくもないです。 ご存知の方がいれば、ご教授願いますでしょうか? 以上、何卒宜しくお願い致します。

  • DOSでフォルダごと移動するには

    WindowsNT 4.0を使用しておりまして、 夜間に起動するバッチファイルを作成しております。 1つのフォルダの中に、数個のフォルダに分かれておりまして、1つが数GBあります。 人が使用していない時間帯に、移動をかけたいのですが、 --------------------------------------------- move C:\DIR1 C:\TEMP (DIR1をC:\TEMPフォルダに移動したい) --------------------------------------------- MOVEコマンドで、フォルダの移動を試みたのですが エラーになり、正常に処理してくれません。 自分のクライアント(WindowsXP)では、 問題なく、移動できたのですが NTのDOSコマンドでは、ダメなのでしょうか?? ちなみに、フォルダ以下にあるファイルに対して MOVEコマンドを実行すると、正常に移動できました。 フォルダごと、サブフォルダも含めて 移動したい場合は、どのように記述すれば よろしいのでしょうか?お知恵をお貸しください。

専門家に質問してみよう