- 締切済み
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のコマンドプロンプト)
- yam2012
- お礼率80% (270/334)
- その他(ソフトウェア)
- 回答数2
- ありがとう数1
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- notnot
- ベストアンサー率47% (4848/10262)
再現しません。 @echo offを取って、実行されているコマンドを確認しては?
- NuboChan
- ベストアンサー率47% (745/1583)
質問内容から推察するとカテゴリー的には、 下記のスレッド(カテゴリー)の方が良いのでは無いかと? その他(プログラミング・開発) https://okwave.jp/c260.html -------------------
関連するQ&A
- DOSコマンドバッチのFOR文の記述
FOR文で以下のように記述しています。 SET FILENAME=aaa.txt FOR /F "tokens=1,2" %%i IN (revs.txt) DO SET FILENAME=%%i-%%j.txt & echo %FILENAME% echoで直前でSETした値を表示したいのですが、どうしても変化しません。(aaa.txtのまま) ※%i,%jには正しく値が設定されています。 以下を教えてください。 ・FILENAMEに値を設定する方法 ・コマンドが長い場合に改行する方法(もしあれば) よろしくお願いします
- ベストアンサー
- その他(プログラミング・開発)
- msdosのfor /fのtokens=の挙動
Windows7のmsdosのfor /fのtokens=の挙動ですが、 tokens=1,3とした時は1番目と3番目のトークンが取り出され tokens=1-3とした時は1番目~3番目のトークンが取り出される のではないのでしょうか。 例えば、以下のような例の場合、 test1.batでは、 a b d f test2.batでは、 a b c d e f となるように思うのですが 実際には、どちらも、 a b d となり、1番目のトークンしか 取り出されていないのですがなぜなのでしょうか。 ---test.txt--------------------------- a b,c d,e,f ---test1.bat------------------ for /f "tokens=1,3 delims=," %%a in (test.txt) do ( echo %%a ) ---test2.bat------------------ for /f "tokens=1-3 delims=," %%a in (test.txt) do ( echo %%a ) ------------------------------
- ベストアンサー
- Windows系OS
- 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本で実現したいのですが可能でしょうか? ※何かしらのソフトで実施したくもないです。 ご存知の方がいれば、ご教授願いますでしょうか? 以上、何卒宜しくお願い致します。
- 締切済み
- その他(プログラミング・開発)
- バッチファイルのfor文の使い方がわかりません。
バッチ初心者です。 指定したフォルダのテキストファイルを一括置換するバッチファイルを作成したのですが、 for文を使うところでつまづいてしました。 for文のin( )内にディレクトリを入れると失敗してしまいます。 失敗例↓ for %%f in (d:\aaa\*.txt) do ( set fname=%%f set fname=!fname:%1=%2! ren %%f !fname! ) for文を for %%f in (*.txt) にすると成功します。 IN( )内にディレクトリを入れると処理が失敗するのはなぜでしょうか?? helpを読んでもわかりません。 試しにオプション付けて for /r d:\aaa %%f in (*.txt) do echo %%f を実行すると成功するので、 for /r d:\aaa %%f in (*.txt) do ( ・・・・ ) にしてみましたが、成功しません。。。
- ベストアンサー
- Windows XP
- バッチファイルのfor文を使ってファイルサイズをMbyteで表したい。
バッチファイルのfor文を使ってファイルサイズをMbyteで表したい。(WindowsXP) for文を使って、フォルダー内のファイル名とサイズ一覧を作ろうとしています。 1)for %%i in (c:\test\*.*) do echo %%i %%~zi>> c:\test\testfiles.txt で一応はできたのですが、これではファイルサイズがわかりにくいので、メガバイト単位にしたいのです。(だいたいわかればいいので1024で割るとかはしない) 2)for %%i in (c:\test\*.*) do echo %%i %%~zi/1000000>> c:\test\testfiles.txt 3)for %%i in (c:\test\*.*) do set /a x=%%~zi/1000000 & echo %%i %%x>> c:\test\testfiles.txt としてもうまくいきません。 %%~ziが数値でなく文字列のため、だと思うのですが、3)は%の付け方とかも間違ってそう。 どう書けばメガバイト単位で一覧を出せるでしょうか? あれ? 4)for %%i in (c:\test\* ) do if %%~zi GEQ 1000000 echo %%i>> c:\test\testfiles.txt とすれば1メガ以上のファイル名一覧が出ますね。 ということは%%~ziは数値なのか。 どなたか、どこが間違っているのか教えていただけないでしょうか
- ベストアンサー
- Windows系OS
- MS-DOS: for文で「01」が「1」になってしまいます
よろしくお願いします。 Windows 2000 Server についての質問です。 for文を使いバッチを組んでいます。 形式は下記です。 FOR /L %変数 IN (開始,ステップ,終了) DO コマンド [コマンドパラメータ] 1.例えば、次のようにバッチファイル(test.bat)に記述します。 for /L %%F IN (%1,1,%2) DO echo %%F 2.そして、次のようにコマンドプロンプトで実行します。 test.bat 01 06 3.エコーとして返るのは、1,2,3,4,5,6 という1桁の数値であり、 01,02,03,04,05,06 という2桁の数値ではありません。 後者のように2桁で返したいのですが、どのようにすれば良いでしょうか。
- ベストアンサー
- その他(プログラミング・開発)
- バッチファイルでの%を含むファイル名の取得
以下は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
- ベストアンサー
- その他(プログラミング・開発)
- バッチファイル For 文 スペース
いつも大変御世話になっております。 WindowsXP環境下の 【D:\test】フォルダ直下に TEST.conf というファイルがあり 中身は1行こんな文があります。↓ test001=12345 6 そして 【D:\test\bat】フォルダ直下に TEST.bat というファイルがあり 中身のードはこんなコードです。↓ For /F "tokens=1*" %%i in (..\TEST.conf) do set %%i SET IN_FILE=%test001% 実行結果は SET IN_FILE=12345 になりました。 なぜ SET IN_FILE=12345 6 ではないのですか? スペースを _ (アンスコ)など何か入れてあげると SET IN_FILE=12345_6 上記バッチファイルのFor文では、スペース手前までしか見てくれないのでしょうか? 他に方法は無いのでしょうか? もしご存知の方がいらっしゃるようでしたら、お手数ですが 実現可能かどうかをご回答願いますでしょうか? 以上、何卒宜しくお願い致します。
- ベストアンサー
- その他(プログラミング・開発)
- for文使用時の変数の展開について
初めて投稿します。 bat処理に関してfor文の制約?で困っています。 for文を2重に使用し(入れ子)、2つ目のfor文のオプションに変数を使用したいと思っています。 通常の変数(%data%)の場合は実行が可能なのですが、遅延環境変数(!data!)をトークンに使用すると、エラーとなって処理がうまくいきません。 ソースは以下のとおりです。 for /l %%e in (4,2,50) do ( set startToken=%%e set /a endToken=%%e+1 for /f "tokens=!startToken!,!endToken! delims=:" %%T in ("%fileLine%") do ( echo echo T %%T echo echo U %%U ) ) for文の制約なのでしょうか?
- ベストアンサー
- その他(プログラミング・開発)
- FOR文のログファイル書き出し
以前こちらで、for文を教えてもらいました。 同じディレクトリにある*.txtファイルの最後の行に、XXXXXを追記するというものです。 FOR %%F IN (*.txt) DO echo XXXXX >> %%F ここで同じディレクトリにある*.txtが、2000ファイル近くあるので、処理がされたかどうかをログファイルとして書き出したいのですが、FOR文を使ったリダイレクション(>>)は、どのようにやるのでしょうか? (当然ながら、FOR %%F IN (*.txt) DO echo XXXXX >> %%F >> log.txt などとしてもダメでした) お手数をおかけします。よろしくお願いいたします。
- ベストアンサー
- その他(プログラミング・開発)
お礼
そうですね。 その他(プログラミング・開発)の方がよかったと思います。 次からはこちらで質問するようにします。 ありがとうございました。