【.cmd】 バッチファイルスクリプト %6 【.bat】at TECH
【.cmd】 バッチファイルスクリプト %6 【.bat】 - 暇つぶし2ch2:デフォルトの名無しさん
10/06/26 01:47:00
>>1
スレ立て乙

3:デフォルトの名無しさん
10/06/28 07:01:18
お願いします。

for /f "usebackq tokens=*" %i in (`echo c:\`) do @set RESULT=%i
echo %RESULT%
c:\

とうまくいくのですがこれにパイプを入れて

for /f "usebackq tokens=*" %i in (`echo c:\ | dir`) do @set RESULT=%i
とすると、| の使い方が誤っています。とエラーになります。
echo c:\ | dirだけ打ち込むと、
dir c:\と同じ結果が得られます。

パイプ処理を用いたコマンド結果を変数に格納したいのですが、うまくいきません。
どのようにすればうまくいくか教えて下さい。

主として使うOSはvistaですが、xpでも動くようにしたいです。



4:デフォルトの名無しさん
10/06/28 07:07:00
>xpでも動くようにしたいです。

xpだとecho c:\ | dir自体うまくいかないぞ
カレントディレクトリのリストが表示されるだけ
普通にdir c:\形式に書き換えればいいんじゃねーの

5:3
10/06/28 07:40:33
>>4
レス恐縮です。

コマンドは、dirを説明上用いていますが、
for /f でパイプが動作しないのです。
コマンドの組み合わせが悪いのかと思い
いろいろコマンドを変えてはみたのですが。

そこをなんとかお教えいただければ。

ちなみに当方の環境では、echo c:\ | dirはうまく動きました。
xp proとメディアセンターエディションで確かめました。


6:デフォルトの名無しさん
10/06/28 09:50:46
| を ^ でエスケープして ^|

他の例は「バッチファイル エスケープ」あたりでググれば良いかと。
本筋じゃないけど、>>4 の言うように「echo c:\ | dir」はうまくいかないと思うんだが。
「dir /b < echo c:\」?


7:デフォルトの名無しさん
10/06/28 12:01:55
単に説明に使ってるだけだからdirでもdriでもなんでもいいんじゃね

8:デフォルトの名無しさん
10/06/28 14:39:04
for /f "usebackq tokens=*" %i in (`"echo c:\ | dir"`) do @set RESULT=%i
"~"で逃げろ

9:デフォルトの名無しさん
10/06/29 07:20:47
>>1


10:デフォルトの名無しさん
10/06/29 21:32:22
                 。・ 。・゚。・゚。・゚。゚・.・。゚゜。゚・。.゚・。
              。・゚ 。・゚ 。・゚。・         ・゚.
             。・゚ 。・゚ 。・゚             。・。
            。・゚ 。・゚ 。・゚             。・。・
           。・゚ 。・゚ 。・゚              。・。・゚
          。・゚ 。・゚ 。・゚                。・。・゚・
         。・゚ 。・゚ 。・゚               。・゚・゚・
         。・゚ 。・゚ 。・゚           。・゚・。・゚
         。・゚ 。・゚ 。・゚       。・゚・。・ ゚・
   ∧_,,∧  。・゚ 。・゚ 。・゚     ・。・゚・ 。 ・゚。
  ( ;`・ω・ ) 。・゚ 。・゚ 。・゚。・゚・。 ・゚・。 ・゚・。・゚ ・。・゚・。・゚・ 。・゚ ・。・。・
  /   o━ヽニニニニニニニニニニニニニニニニニニフ
  しー-J


ID:にカーソルを合わせると不思議と>>1乙になる馬鹿にはできない魔法のコピペ

11:デフォルトの名無しさん
10/06/30 00:07:48
>>10


12:デフォルトの名無しさん
10/07/09 19:12:34
ファイルをD&Dすると拡張子を除去するバッチを作ったんですが、
全角スペースが含まれている場合にファイル名が分割されてしまって動きません。
半角スペースが含まれる場合はダブルクォーテーションが付加されるので問題なく処理できるのですが・・・
やはり対処法はファイル名を変更するかD&Dをしないことしかないでしょうか。
echo %1 >> log.txt を追加してやると、ファイル名が分割されてるのが確認できます。

cd /d "%~dp1"
:loop
if %1=="" goto end
rename %1 "%~n1"
shift
goto loop
:end

とりあえず
> rename "たいとる *.*" "たいとる *.*"
でまとめて半角スペースにできたのでこれでいきます。


13:デフォルトの名無しさん
10/07/09 23:41:10
%*を自分でパーズすればできるよ

14:デフォルトの名無しさん
10/07/09 23:47:10
パーズ

15:デフォルトの名無しさん
10/07/10 00:17:16
普通のプログラミング言語ならやりやすいだろうけど
%~dp1を記憶しといて一致するまでのやつを連結?
ちょっと大変だなあ。

16:名無しさん@そうだ選挙に行こう
10/07/10 17:09:02
ぐぐればサンプルあるよ

17:デフォルトの名無しさん
10/07/12 21:13:48
set x=%*
for %%i in (%x: =?%) do echo "%%~i"

18:デフォルトの名無しさん
10/07/14 11:13:01
&を含む引数を受け取る方法は無いでしょうか?
拡張子関連付けして、他のプログラムから受け取ってます

19:デフォルトの名無しさん
10/07/14 14:11:35
""で囲ってやると受け取れるみたいだ

20:デフォルトの名無しさん
10/07/14 14:50:18
>>19
ありがとうございます。
いろいろ試行錯誤してたのが馬鹿みたいに、スマートに解決しました。

21:デフォルトの名無しさん
10/07/15 22:04:37
exeファイルがコンソールアプリか否かバッチでどうやっったら判定できますか?

22:デフォルトの名無しさん
10/07/16 15:27:37
URLリンク(chrono.cocolog-nifty.com)
こんなのが。バッチは向かない気がバリバリする。

23:デフォルトの名無しさん
10/07/16 15:34:22
後は任せた

set command=%1
goto %command%

:explorer
:notepad
echo not CUI
exit /b

:cmd
:sort
echo CUI
exit /b

24:デフォルトの名無しさん
10/07/18 02:41:59
バリバリ やめて!(ry
@if(0)==(0) echo off
cscript.exe //NoLogo //E:JScript "%~f0" %1
echo %errorlevel%
goto :EOF
@end
var sc=new ActiveXObject("ScriptControl");
sc.Language="VBScript";
sc.AddCode("Function bin(t):bin=AscB(t)+AscB(MidB(t,2,1))*256:End Function");
function B(data){return sc.Run("bin", data);}
var ado=new ActiveXObject("ADODB.Stream");
ado.Type=1;
ado.Open();
ado.LoadFromFile(WScript.Arguments(0));
if(23117!=B(ado.Read(2))){ado.Close();WScript.Quit(-1);}//not MZ
ado.Position=ado.Size>60?60:0;
sigp=B(ado.Read(2));
ado.Position=ado.Size>sigp?sigp:0;
sig=B(ado.Read(2));
if(17744==sig){//PE
ado.Position=sigp+92;
sys=B(ado.Read(2));
ado.Close();
WScript.Quit(sys);
}else if(17742==sig){ado.Close();WScript.Quit(-2);//NE
}else ado.Close();WScript.Quit(-3);//MZ


25:デフォルトの名無しさん
10/07/18 16:29:01
exehder.exe
dumpbin.exe

26:デフォルトの名無しさん
10/07/19 03:05:32
SHGFI_EXETYPE

27:デフォルトの名無しさん
10/07/21 23:57:28
バッチを実行したタイミングで指定したテキストファイルに
現在の日時を追記し保存する処理を考えています

できるだけ簡単にやりたいのですがcmd(コマンド)だけでできますでしょうか?
cmdのショートカットだけでできれば1番いいのですが
スレ違いでしたら、すいません。

28:デフォルトの名無しさん
10/07/22 01:04:13
echo %date% %time% >> "%~0.log"
start "" yourcommand

29:デフォルトの名無しさん
10/07/22 03:00:58
cmd /c echo %date% %time% >> "%~0.log" & start "" yourcommand

30:27
10/07/22 09:57:25
>>28-29
ありがたき幸せ

あとは余計な秒を削るのを調べてみます
yyyy/mm/dd hh:mm:ssにしたいので

31:27
10/07/22 18:51:07
>>30の目的が達成できました
バッチスクリプトは奥が深いですね
少し勉強してみます

32:27
10/07/22 23:29:23
連投ですいません

cmd /c echo %date% %time% >> "ログ.txt"

これを実行して生成されたファイルを見ると
yyyy/mm/dd hh:mm:ss△
と表記されます(△は半角ブランク)

この半角ブランクをバッチスクリプト内で外す事が出来ずに悩んでます
何か良い方法がありますでしょうか?
また、何故半角ブランクが付加されるのでしょうか?


33:デフォルトの名無しさん
10/07/23 00:25:33
>>32
cmd /c echo %date% %time%>> "ログ.txt"
リダイレクトの直前のスペースを書かない

34:デフォルトの名無しさん
10/07/23 02:44:59
すいません。誰か教えてください
ドラッグ&ドロップするとファイル名の先頭に「決」をつけるように
ren %~f1 決%~n1%~x1
としたんですが、ファイル名に空白があると「コマンドの構文が誤っています」と出ます。
対処法を教えてください。
また複数ファイルドロップに対応する方法はありますでしょうか?
よろしくお願いします

35:デフォルトの名無しさん
10/07/23 04:08:22
for %%a in (%*) do ren "%%a" "決%~n1%~x1"
確認してない

36:デフォルトの名無しさん
10/07/23 06:26:32
>>35
ありがとうございます。
確認したら出来ませんwwwでしたが、元にして完成しました。
空白もなんとか解決できそうです。

37:32
10/07/23 07:49:36
>>33
そんなオチだったとは…
○| ̄|_

ありがとうございました

38:デフォルトの名無しさん
10/07/23 16:38:08
>>34をcmdのショートカットだけでできますか?

39:デフォルトの名無しさん
10/08/08 04:02:40
有効なIPが割り当てられているか否かで処理を分岐したいんですが
ネットワークに接続できている場合変数に0、接続できていない場合変数に1を入れたい場合どうすればよいでしょうか?

40:デフォルトの名無しさん
10/08/08 10:09:32
>>39
自分自身が持つIPが有効で接続されているかどうかということ?
ipconfigでデフォルトゲートウェイのIPアドレスを取得して
そこにpingして帰ってきた文字列をfindして分岐かな?

41:デフォルトの名無しさん
10/08/08 10:40:33
ping後のerrorlevelでええがな

42:デフォルトの名無しさん
10/08/08 11:49:24
netsh interface <ipv4 or ipv6> show interfaces
netsh interface <ipv4 or ipv6> show ipaddress name=<インデックス or 名前>


43:デフォルトの名無しさん
10/08/09 05:05:09
>>40
ありがとうございます。
できました
この方法で分岐しようと思います。

>>41
ありがとうございます。
その方法だと場合によって無効でもerrorlevelに0が入ってしまうんです・・・。
オプションでできるかもしれませんがわかりませんでした。

>>42
ありがとうございます。
一番スマートそうですが
僕のレベルだと理解できませんでした・・・。

44:デフォルトの名無しさん
10/08/09 16:32:19
URLリンク(fpcu.on.coocan.jp)
のようにTESTフォルダ下のフォルダ数を変数に格納したいのですがわかりません
お願いします。
for /D %%f in (*) do set /a i=i+1

45:デフォルトの名無しさん
10/08/09 18:29:50
すまんこ
forのヘルプに書いてあったwww

46:デフォルトの名無しさん
10/08/09 23:03:45
>>44
解決しました。
CD TEST
FOR /F "DELIMS=" %%A IN ('DIR /B ^| FIND /C /V ""') DO SET COUNT=%%A


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch