• ベストアンサー

バッチの書方2題

XP_HEsp3です。 バッチの書方で教えてください。 1.ファイルのタイムスタンプを比較する方法 次のような処理で更新日時が新しければ、 if hoge.txt-timestamp > hoge.utf8-timestamp ( nkf -w8Lu hoge.txt > hoge.utf8 ) というのはどう書けばよいでしょうか。 2.解説をお願いします。 set t=%time:~0,5% mkdir %date:/=_%_%t::=_% timeとdateの出力を利用する、出力にはコロンが入っている。 ・・・・位しか分りません。 実行してみてアンダーバーの意味は分りました。 ~0,5% とスラッシュが分りません。

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

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

スペースなどを削除と考えるより ""でくくってしまった方が簡単でしょう if "%txt" GTR "%utf%" ( touch %utfName% ) といった具合です

snake_city
質問者

お礼

ありがとうございます。仰有るとおりでした。 if "%txt%" GTR "%utf%" touch test.log if "%txt%" GTR "%utf%" (nkf -eLu hoge.txt > hoge.euc) どちらも条件が真の場合のコマンドが実行されました。 ""で括れば大小を比較するのですね。 不思議です。 ExcelのDate関数は整数値を返すので、それとの連想で、整数値に整形すべきと考えました。

その他の回答 (4)

noname#259269
noname#259269
回答No.4

あ、すみません、こうです。↓ IF %txt% GTR %utf% (touch test)

snake_city
質問者

お礼

%%で括るべきなのを私が当然気付くべきでしたm(_)m。 しかし、 ------------- C:\temp>set txt txt=2008/09/09 11:33 C:\temp>set utf utf=1997/01/01 11:11 C:\temp>IF %txt% GTR %utf% (touch test) 11:33 の使い方が誤っています。 -------------- となるので、/と:とスペースを取除くべきかと。 その方法を教えてください。 set /? の説明は私には難しすぎます。

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

ファイルのタイムスタンプの取得は FORで取得可能でしょう for %%I in (hoge,txt) do set txt=%%~tI for %%I in (hoge.utf8) do set utf=%%~tI とすれば 日付と時間が環境変数 txtとutfに取り出せますよ コマンドラインで確かめる場合は %%を %に置き換えてください

snake_city
質問者

お礼

ご回答感謝です。 コンソールで for %I in (hoge.txt) do set txt=%~tI for %I in (hoge.utf8) do set utf=%~tI IF txt GTR utf (touch test) としても駄目ですね。 日付と時間が環境変数txtとutfに格納されるのは確認しました。 この値を / と : を取除いて単純な整数にすればよいのでしょうか。

noname#259269
noname#259269
回答No.2

1番のヒント。 SET txtfile=hoge.txt-timestamp SET utffile=hoge.utf8-timestamp SET txt=... SET utf=... IF txt GTR utf ( ~ ) ...の部分は、2.の解説を元に考えてみてください。 GTR については、コマンドプロンプトから、IF /? で説明が見れます。

noname#259269
noname#259269
回答No.1

とりあえず2番だけ。 >set t=%time:~0,5% time の出力のうち、先頭から5文字分を取り出して 環境変数 t に入れます。 >mkdir %date:/=_%_%t::=_% ディレクトリを作成します。ディレクトリ名のうち 「%date:/=_%」を [A]部、「%t::=_%」を[B]部とすると、 [A]_[B] というディレクトリを作ります。 [A]部は、date の出力のうち、"/"記号を"_"に置換したもの [B]部は、環境変数 t のうち":"記号を"_"に置換したもの コマンドプロンプトを起動し、SET /? と入力すると、説明が見えますよ。

関連するQ&A

  • nkfで全角ハイフンが半角になる(cygwin)

    http://sourceforge.jp/projects/nkf/ でダウンロードしたものをcygwinでmakeしたものを使っています。 nkf -w8 -W16L -x hoge.txt > moge.txt nkf -w16L -W8 -x moge.txt > hoge2.txt とすると、全角ハイフンが半角になってしまいます。 UTF-16LE→UTF-8→UTF-16LEで可逆変換できるようなオプションはどのように指定すれば良いですか? またはそれが可能な別のコマンドラインツールはありますか? (Windowsまたはcygwinで動作可能な) UTF-16で出力されるWindows RegistoryファイルをsvnにUTF-8で保存してバックアップしたいです。 UTF-16はsvnにバイナリ扱されるし、圧縮されるとはいえほとんどがASCIIのレジストリファイルでは無駄が多いので、UTF-8で保存しようと思いました。 具体的には以下のようなバッチファイルを起動時や定期的に実行します。 regedit.exe /e hoge.reg HKEY_CURRENT_USER\hoge nkf -w8 -W16L -x hoge.reg > hoge.txt svn.exe add hoge.txt svn.exe ci -m "" hoge.txt (パスは省略してあります) Windowsでの運用なのですが、nkfなのでLinuxのカテゴリに投稿させていただきました。

  • ブラウザからバッチ起動時のPathについて

    クライアントのPCからブラウザ上でボタンをクリック するとサーバー上のバッチを起動するようにしていますが、サーバー上で直接バッチを起動した場合は正常に動作しています。しかし、ブラウザから起動した場合には一部が正常に動作してくれません。 ブラウザから起動したバッチ上で echo %path% > c:\aaa.txt としてPathを確認しようとしたら「echoはONです」と 出力されていました。 直接起動した場合は環境変数のPathが出力されます。 環境変数で指定しているPathは使えないのでしょうか? ご存知のかたがいらっしゃいましたらご教授お願い致します。 【バッチの内容】 set DT=%date:~2,4%%date:~7,2%%date:~10,2% if "%time:~0,1%"==" " set TM=0%time:~1,1%%time:~3,2%%time:~6,2% if "%time:~0,1%"==" " GOTO :P1 set TM=%time:~0,2%%time:~3,2%%time:~6,2% :P1 set DirName=C:\backup\%DT%_%TM% mkdir %DirName% echo %path% >C:\hammy\hammy.txt aaa.exe 引数 ←ここが正常に動作しない

    • ベストアンサー
    • Java
  • バッチ処理でテキストから数値を取り出し、CSVにしたい

    こんにちは。 似非SEです。 2度目の質問です。 現在、あるサーバのディスク容量の増減を管理するため、 以下のバッチをスケジューリングして、容量をファイルに 書き込んでいます。 -------------------------------------------------------- echo D:\ >> DS_D.txt date /t >> DS_D.txt time /t >> DS_D.txt dir D:\ | find "バイトの空き領域" >> DS_D.txt -------------------------------------------------------- 出力されるファイルは次のようになります。 -------------------------------------------------------- D:\ 2008/05/22 09:29 3 個のディレクトリ 39,870,087,168 バイトの空き領域 D:\ 2008/05/23 09:45 3 個のディレクトリ 39,870,087,168 バイトの空き領域 -------------------------------------------------------- 非常に簡単に容量がわかるのですが、これをグラフにするのに 手間がかかってしまっています。 <要望> 1.出力テキストから日付を取得 2.出力テキストから空き容量の数値を取得 3.csvファイルに落とす 出力ファイルは 2008/05/22[TAB]39,870,087,168[リターン] 2008/05/23[TAB]39,870,087,168[リターン] のようにできればベストです。 なにとぞ似非SEを助けて下さいませ!

  • ファイル出力をUTF8NではなくてUTF8で行いたい

    おせわになります。 Shift-JISで記述したPerlで、ファイル出力をしようとしています。 ------------------------------------ #!/usr/local/bin/perl use encoding 'shiftjis'; $hoge="ほげ" open(OUT,">file.txt") binmode OUT; print OUT $hoge; close(OUT); ------------------------------------ 希望はUTF8での出力なのですが、UTF8Nで出力されてしまいます。 どのようにすればいいのかご教授よろしくお願いします。

    • ベストアンサー
    • Perl
  • Windows マシンでFTPバッチが動かない

    Windowsサーバから、UNIXサーバにFTPでファイル取得しようとすると、エラーがでてすすみません。 コマンドプロンプトで 対話的に動かす分には問題なく動作するのですが、バッチで動かすと エラーがでてしまうのです。 動かそうとしているバッチファイルとその読み込みスクリプトは以下です。 (変数部分はぼかしています) ==== myftp.bat BGN ==== set dirname=%DATE:/=% mkdir D:\master\%dirname% ftp -s:ftpcmd.txt ==== myftp.bat END ==== ==== ftpcmd.txt BGN ==== open hoge user_naem pass_word bin lcd D:\master get file.txt quit ==== ftpcmd.txt END ==== これらを動かすと、 スクリプト ファイル ftpcmd.txt を開くときにエラーが発生しました。 というエラーがでて前に進みません。 対話ベースでは、ftpcmt.txt ファイルの内容をコピペして、きちんと動くので、 何が原因がわかりかねています。 どなたか知恵を貸してください。

  • C#での文字置換について

    hoge.txt -------------- #abc_1 111111111 222222222 333333333 #abc_2 111111111 222222222 333333333 #abc_3 ... -------------- StreamReader sr = new StreamReader("hoge.txt", Encoding.GetEncoding("UTF-8")); sr.ReadToEnd(); でファイルを読み込み#abc_1から#abc_2の間の 111... 222... 333... というのを削除して 出力したいのですが分かりません。 (同様に#abc_2から#abc_3の間も削除します) つまり出力は #abc_1 #abc_2 #abc_3 となるように。 宜しくお願いします

  • cshの文字列置換

    ヤマトです。 cshでファイル文字列を置換したいのですが、分かりません。 環境はRed Had Linux7.2です。 hoge1.txt の中の 'HIDUKE' という文字列を今日の日付に置換し、 hoge2.txt に出力するようなシェルを作りましたが、正常に動作しません。 ====hoge1.txt(置換前)==== 今日はHIDUKEです。 ====hoge1.txt(置換前)==== 今日は030814です。 ====SAMPLE.sh(一部抜粋)==== set TODAY = `date +"%y%m%d"` sed 's/HIDUKE/$TODAY/g' < hoge1.txt > hoge2.txt 以上のようなシェルを作りました。 結果として、hoge2.txtには出力されるのですが、 「今日は$TODAYです」 となってしまいます。 変数の値を置換するにはどのようにしたら良いのでしょうか? 教えて頂けると有り難く思います。宜しくお願いします。

  • Date Timeを1行に出力(xxx.bat)

    バッチを用いて、ログファイルにDateとTimeを 同じ行に書き出したいと考えます。 現状、xxx.bat--------------- echo %date% >> mylog.txt echo %time% >> mylog.txt mylog.txtは、下記のようになっています。 2012/05/01 22:56:08.61 これを、 2012/05/01  22:56:08.61 のように出力させたいのです。 どのようにすれば、可能でしょうか? 宜しくお願いいたします。

  • 現在の文字コードの確認

    お世話になります。 以下のシェルスクリプトでテキストファイルの文字コードをUTF8に変換したあと、 返還後の文字コードを確認するステップを追加したいと考えています。 ------------------------------------- #!/bin/sh for f in `ls *.txt` do iconv -f SJIS -t UTF8 < $f > utf8-$f done ------------------------------------- 次のようなスクリプトを作成しましたが正常に処理が行われませんでした。 どのように記述すればよいでしょうか。 ------------------------------------- #!/bin/sh for f in `ls *.txt` do iconv -f SJIS -t UTF8 < $f > utf8-$f nkf -g < $f > done ------------------------------------- ご協力のほどよろしくお願いいたします。

  • エスケープしたくない、けど、したいのもある

    とあるテキストデータ(.txt)を読み込み、それを表示するスクリプトをPHPで作りました。 その際、もしテキストデータにHTMLタグが入っている場合、そのまま出力させて、タグが有効になるようにしています。 (というかテキストを何も処理せずそのまま出力するだけ) (セキュリティ的には、テキストデータは信頼できる自サイトの同一ディレクトリに置いてあるものからしか読み込ませないようになっています) しかし、今度は逆に、もしそのテキストデータに「<hoge>」などの文字がふくまれていた場合、ブラウザはそれをタグと認識し、見えない表示になります。 本当は見えるようにそこは「&lt;hoge&gt;」と出力してほしいわけです。 かと言って、 echo htmlspecialchars($txt, ENT_QUOTES|ENT_HTML5, "UTF-8"); などエスケープして出力すると、今度はHTMLタグとして出力させたい「<br>」なども「&lt;br&gt;」として出力されてしまい都合が悪いです.. ようは、 「こんにちは<hoge><br>ほげ」 という文字列のテキストを、 「こんにちは&lt;hoge&gt;<br>ほげ」 と出力してほしい.. もちろんテキストは「hoge」であるとは限りません。 何かよい解決方法はないでしょうか? ご教示頂けましたら幸いです。

    • ベストアンサー
    • PHP

専門家に質問してみよう