[過去ログ]
【.cmd】 バッチファイルスクリプト %12 【.bat】©2ch.net (1002レス)
【.cmd】 バッチファイルスクリプト %12 【.bat】©2ch.net http://mevius.5ch.net/test/read.cgi/tech/1489207631/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
837: デフォルトの名無しさん [sage] 2018/09/14(金) 18:51:45.62 ID:fIt3xJ+t >>834 chcp 65000が利かないのかな?環境は2000? XP? こっちではどうかな? for /f "tokens=1,2 delims=[" %%i in ('cmd /u /c echo 寿対') do set xFF=%%i&set xFE=%%j set /p BOM=%xFF%%xFE%<nul>utf16le.txt http://mevius.5ch.net/test/read.cgi/tech/1489207631/837
838: デフォルトの名無しさん [sage] 2018/09/14(金) 20:35:18.83 ID:Ah8o0gi1 >>837 バッチに >>830を書いて実行したら FF FEになった。 コマンドプロンプトで1行づつやってたからダメだったらしい >>837 もバッチで大丈夫でした Win10です http://mevius.5ch.net/test/read.cgi/tech/1489207631/838
839: デフォルトの名無しさん [sage] 2018/09/19(水) 17:45:23.36 ID:zK7o51II setlocal enabledelayedexpansion set a=a set b=A if /i %a% == %b:~0,1% echo eq1 if /i !a! == !b:~0,1! echo eq2 set c=!b:~0,1! if /i !a! == !c! echo eq3 if /i %a% == %b% echo eq4 if /i !a! == !b! echo eq5 結果は eq1 eq3 eq4 eq5 何故か eq2 が出ない http://mevius.5ch.net/test/read.cgi/tech/1489207631/839
840: デフォルトの名無しさん [sage] 2018/09/19(水) 18:33:47.81 ID:zK7o51II setlocal enabledelayedexpansion set a=abc if /i !a:~0,1! == !a:~0,1! echo eq 1! の使い方が誤っています。 俺の PC だけなのか? http://mevius.5ch.net/test/read.cgi/tech/1489207631/840
841: デフォルトの名無しさん [sage] 2018/09/19(水) 18:44:41.74 ID:zK7o51II 分かった ^, にしたら良かった if /i !a:~0^,1! == !a:~0^,1! echo eq http://mevius.5ch.net/test/read.cgi/tech/1489207631/841
842: デフォルトの名無しさん [sage] 2018/09/20(木) 06:54:59.39 ID:SZObeV+C 謎仕様だなあ... http://mevius.5ch.net/test/read.cgi/tech/1489207631/842
843: デフォルトの名無しさん [sage] 2018/09/21(金) 03:25:46.77 ID:q2E2aQh+ また謎です shiftすると%1は変わるが、%*は変わらない http://mevius.5ch.net/test/read.cgi/tech/1489207631/843
844: デフォルトの名無しさん [sage] 2018/10/03(水) 12:55:17.46 ID:kms9X1pz 表示は出来るが、代入が一部だけ出来ない整数値があったよ @echo off setlocal enabledelayedexpansion set /a "a=1<<31" set /a b=a set /a c=%a% set /a d=!a! echo a=%a% echo b=%b% echo c=%c% echo d=%d% pause 結果は a=-2147483648 b=-2147483648 c= d= http://mevius.5ch.net/test/read.cgi/tech/1489207631/844
845: デフォルトの名無しさん [sage] 2018/10/05(金) 06:58:30.40 ID:Iu01kfl1 setlocal enabledelayedexpansion set /a "a=1,b_!a!=2" set b_ で、 b_0=2 何か変だが、こういう仕様なのか? http://mevius.5ch.net/test/read.cgi/tech/1489207631/845
846: デフォルトの名無しさん [sage] 2018/10/05(金) 08:53:46.57 ID:vSWfZutq ,で分けてあってもsetコマンドは1つだけなので複数コマンドとは思われてないってことなんだろうね setlocal enabledelayedexpansion set /a a=1 & set b_!a!=2 set b_!a! なら大丈夫 http://mevius.5ch.net/test/read.cgi/tech/1489207631/846
847: デフォルトの名無しさん [sage] 2018/10/05(金) 17:03:33.33 ID:Iu01kfl1 >>846 ありがとうございます !a! は set /a 実行直前の値でした setlocal enabledelayedexpansion set /a a=0 for /L %%i in (1,1,3) do set /a "a=%%i,b=a,c=!a!,d=%a%" & echo !a! !b! !c! !d! 1 1 0 0 2 2 1 0 3 3 2 0 http://mevius.5ch.net/test/read.cgi/tech/1489207631/847
848: デフォルトの名無しさん [sage] 2018/10/05(金) 17:27:41.95 ID:vSWfZutq setlocal enabledelayedexpansion set /a a=0 for /L %%i in (1,1,3) do ( set /a a=%%i &set /a b=a &set /a c=!a! &set /a d=%a% &echo !a! !b! !c! !d! ) なら 1 1 1 0 2 2 2 0 3 3 3 0 となる。 bへの値代入が!抜きのaでできるって知らなかったわ… 謎挙動。 http://mevius.5ch.net/test/read.cgi/tech/1489207631/848
849: デフォルトの名無しさん [sage] 2018/10/05(金) 18:09:57.00 ID:Iu01kfl1 set /a で %a% や !a! はあまり使用しない方が良さそうだ % や ! は演算子に含まれる文字で紛らわしいし 展開のタイミングで予想外の挙動するし 展開時に >>844 のように特異値でエラーになったりするし 値参照は変数名だけでいい http://mevius.5ch.net/test/read.cgi/tech/1489207631/849
850: デフォルトの名無しさん [sage] 2018/10/05(金) 18:17:00.44 ID:vSWfZutq ご自由に。それより某グラマー御用達QAサイトのトップ回答者様が書くバッチがgoto :EOF 多用で頭痛い http://mevius.5ch.net/test/read.cgi/tech/1489207631/850
851: デフォルトの名無しさん [sage] 2018/10/05(金) 18:26:50.86 ID:Iu01kfl1 俺もよく使うよ、goto :eof http://mevius.5ch.net/test/read.cgi/tech/1489207631/851
852: デフォルトの名無しさん [sage] 2018/10/05(金) 18:28:05.47 ID:hOPHqLcn >>850 何か問題が? goto :endとかより遥かにいいと思うが http://mevius.5ch.net/test/read.cgi/tech/1489207631/852
853: デフォルトの名無しさん [sage] 2018/10/05(金) 18:33:02.62 ID:Iu01kfl1 goto その物が多いとか言われた事も http://mevius.5ch.net/test/read.cgi/tech/1489207631/853
854: デフォルトの名無しさん [sage] 2018/10/05(金) 18:46:17.97 ID:vSWfZutq 自分だと大抵 {メインルーチン} goto :EOF :sub1 {サブルーチン12} exit /b :sub2 {サブルーチン} exit /b と書くことが多い。 トップ回答者様は {メインルーチン} goto :EOF :sub1 {サブルーチン} goto :EOF sub2 {サブルーチン} goto :EOF と回答されている。サブルーチンの下のはgoto は不要だし慣れない。 http://mevius.5ch.net/test/read.cgi/tech/1489207631/854
855: デフォルトの名無しさん [sage] 2018/10/05(金) 19:02:53.79 ID:Iu01kfl1 戻り値なけりゃどっちでもいい様な気がするが 逆に exit を避けてる人もいるよ http://mevius.5ch.net/test/read.cgi/tech/1489207631/855
856: デフォルトの名無しさん [sage] 2018/10/05(金) 19:53:21.88 ID:LaGwhHU8 俺もgoto派だな http://mevius.5ch.net/test/read.cgi/tech/1489207631/856
857: デフォルトの名無しさん [sage] 2018/10/05(金) 21:35:58.50 ID:RB/KKRkK gotoは見通しが悪くなるから、極力使わないようにしてる 他の主流の言語だと使えないものが多いから、必然的にそういう書き方に慣れてしまった http://mevius.5ch.net/test/read.cgi/tech/1489207631/857
858: デフォルトの名無しさん [sage] 2018/10/05(金) 23:49:53.55 ID:8nMQUHh9 goto は使わないに越したことはない。 が、制御構文が貧弱な言語では、熟慮の上で使わざるを得ない場面で使う。 が正解。 詳しくはWikipediaで。 http://mevius.5ch.net/test/read.cgi/tech/1489207631/858
859: デフォルトの名無しさん [sage] 2018/10/05(金) 23:56:24.52 ID:qkvvR9Zs Cでもgotoは使うよね http://mevius.5ch.net/test/read.cgi/tech/1489207631/859
860: デフォルトの名無しさん [sage] 2018/10/05(金) 23:58:44.47 ID:8nMQUHh9 C言語にはMISRAとかいう規約があるが無視していい。 あれは組み込み分野だけの特殊なものだと思っていい。 大抵の人間は、「これは思考からはぶいていい」という書き方の方が読みやすい。 だから、「これは戻すか終わらせる」と書いていっていい。 そうすれば、残ったものに集中できるだろ? まぁ、日ごろ「自分が辞めた後にこれを読まされる人間が困らないかどうか」って考えて書いてるかどうかってことだ。 http://mevius.5ch.net/test/read.cgi/tech/1489207631/860
861: デフォルトの名無しさん [sage] 2018/10/06(土) 16:39:29.59 ID:P4YKYACU あちこちでreturnするのもスパゲッティなgotoと大差がない気がするんだ テロ的というか http://mevius.5ch.net/test/read.cgi/tech/1489207631/861
862: デフォルトの名無しさん [sage] 2018/10/06(土) 17:10:22.17 ID:GNiE4xH/ 字面が違うだけで同じだろ http://mevius.5ch.net/test/read.cgi/tech/1489207631/862
863: デフォルトの名無しさん [sage] 2018/10/06(土) 20:28:48.17 ID:gea8Zy97 gotoもイディオムに従って使えば混乱しない バッチファイルだとforの方が理解不能で害悪 http://mevius.5ch.net/test/read.cgi/tech/1489207631/863
864: デフォルトの名無しさん [sage] 2018/10/06(土) 23:02:20.58 ID:tgEP6apu gotoがゴーゴーに見えた http://mevius.5ch.net/test/read.cgi/tech/1489207631/864
865: デフォルトの名無しさん [sage] 2018/10/06(土) 23:12:15.45 ID:uJ87E9Rb >>860-861 IPAの出してるMISRAの解説書のreturnは1か所にしろというルール、 あれはクソofクソのルールだと思うね。early returnこそ正義 Cとbatの書き方は全然比較にならないけど http://mevius.5ch.net/test/read.cgi/tech/1489207631/865
866: デフォルトの名無しさん [] 2018/10/07(日) 00:27:12.50 ID:pbh8RIqN >>861 むしろ goto の良い使い方と言われている制限が、return をまねたもの。 http://mevius.5ch.net/test/read.cgi/tech/1489207631/866
867: デフォルトの名無しさん [] 2018/10/07(日) 11:03:03.39 ID:Bzp9uIq0 バッチファイルかパワーシェルでIPv4のIPアドレスのみを取得して環境変数に代入するにはどういうコマンドになりますか? 教えてください http://mevius.5ch.net/test/read.cgi/tech/1489207631/867
868: デフォルトの名無しさん [sage] 2018/10/07(日) 12:00:15.70 ID:6qmhFN/2 「powershell ip address」で検索! http://mevius.5ch.net/test/read.cgi/tech/1489207631/868
869: デフォルトの名無しさん [sage] 2018/10/07(日) 12:28:26.52 ID:VwaVbKnV >>867 環境変数IPAddressに192を含んだIPアドレスを代入するサンプル(PowerShell 2.0併用) set CMD=powershell -command "& {ipconfig |? {$_ -match 'IP.*: 192\.'}|% {$_ -replace '.*: (\d+\.\d+\.\d+\.\d+)','$1'}}" for /f "usebackq delims=" %%a in (`%CMD%`) do set IPAddress=%%a echo %IPAddress% PowerShell部分はipconfigの結果から正規表現でIPと: 192という文字を含む行を抽出 抽出した行のIPアドレス部分のみ正規表現の置換で抽出といった感じ PowerShell3.0以降だともうちょっと素直に書ける感じだけど http://mevius.5ch.net/test/read.cgi/tech/1489207631/869
870: デフォルトの名無しさん [sage] 2018/10/07(日) 12:53:16.71 ID:Dedwpgqn アダプタが1つだけならこんなでいいんじゃね? setlocal enabledelayedexpansion for /f "tokens=2 delims=:" %%a in ('ipconfig ^|find "IPv4"') do set IPADRESS=%%a set IPADRESS=%IPADRESS:~1% echo %IPADRESS% http://mevius.5ch.net/test/read.cgi/tech/1489207631/870
871: デフォルトの名無しさん [] 2018/10/07(日) 12:54:26.67 ID:Bzp9uIq0 この処理作るのにバッチとパワーシェル組み合わせないとできないんですか? ip取得するだけでも結構大変なのですね http://mevius.5ch.net/test/read.cgi/tech/1489207631/871
872: デフォルトの名無しさん [] 2018/10/07(日) 12:56:55.73 ID:Bzp9uIq0 と思ったらバッチだけでもできそうなんですね、アダプターは一つです ちょっと色々教えてもらったのでテストしてみます! http://mevius.5ch.net/test/read.cgi/tech/1489207631/872
873: 870 [sage] 2018/10/07(日) 13:03:20.66 ID:Dedwpgqn 遅延変数展開の呪文要らなかったわ、1行目削っていいよ http://mevius.5ch.net/test/read.cgi/tech/1489207631/873
874: デフォルトの名無しさん [] 2018/10/07(日) 13:07:01.74 ID:Bzp9uIq0 遅延環境数ってforとifの()で使用するときだけ必要なんでしたっけ? http://mevius.5ch.net/test/read.cgi/tech/1489207631/874
875: デフォルトの名無しさん [sage] 2018/10/07(日) 13:23:02.79 ID:Dedwpgqn だいたいその理解でおk forやifの()内のスクリプトブロックが複数処理で変数代入とその参照のペアがある場合に使う 1処理だけとか、代入だけとかなら不要 http://mevius.5ch.net/test/read.cgi/tech/1489207631/875
876: デフォルトの名無しさん [sage] 2018/10/07(日) 17:41:47.85 ID:0jrGYEp4 無限ループの原因は何か SET A=1073741824 FOR /L %%B IN (-%A%,%A%,%A%) DO ECHO %%B http://mevius.5ch.net/test/read.cgi/tech/1489207631/876
877: デフォルトの名無しさん [sage] 2018/10/07(日) 19:04:07.20 ID:Dedwpgqn set /a A=1073741824 1073741824 set /a B=A+A -2147483648 となるからね、32bitINTの範囲が-2147483648〜-2147483647 2進表記の最上位bitが1が立ってしまったらマイナス値 http://mevius.5ch.net/test/read.cgi/tech/1489207631/877
878: デフォルトの名無しさん [sage] 2018/10/07(日) 19:25:23.31 ID:Dedwpgqn 試してみるとfor /l 文ではステップ値が1073741824以上の場合必ずバグったループになるね、まあ仕方ないのかも http://mevius.5ch.net/test/read.cgi/tech/1489207631/878
879: デフォルトの名無しさん [sage] 2018/10/07(日) 19:43:19.94 ID:0jrGYEp4 内部的にどんな計算してるか気になるところです B は -1073741824,0,1073741824 なので 普通に考えると32ビットのオーバーフローはしてない筈 http://mevius.5ch.net/test/read.cgi/tech/1489207631/879
880: デフォルトの名無しさん [sage] 2018/10/07(日) 19:55:29.49 ID:0jrGYEp4 ああ、分かった 4ループめでオーバーフローするのか 3ループめで最終値に等しいと抜けるんじゃ無いわけか http://mevius.5ch.net/test/read.cgi/tech/1489207631/880
881: デフォルトの名無しさん [] 2018/10/07(日) 19:57:49.70 ID:2JwzOMBB バッチファイルのif文でパワーシェルのif -Orみたいな処理できますか? http://mevius.5ch.net/test/read.cgi/tech/1489207631/881
882: デフォルトの名無しさん [sage] 2018/10/07(日) 20:18:06.07 ID:0jrGYEp4 IFの条件は2個の値を比較するだけ 複雑なOR,AND,XORとかあるんなら計算して結果を変数に入れる それをIFの条件で使う http://mevius.5ch.net/test/read.cgi/tech/1489207631/882
883: デフォルトの名無しさん [sage] 2018/10/08(月) 21:58:47.76 ID:To7x1PVP あると便利なミニミニバッチ DOS窓に今の時間を表示しておく m.bat @echo off setlocal set x=%date:~5% %time:~0,5% %* title=%x% exit /B 0 画面クリア c.bat @echo off cls exit /B 0 クリップボードクリア cc.bat @echo off echo.|clip echo clip clear exit /B 0 http://mevius.5ch.net/test/read.cgi/tech/1489207631/883
884: デフォルトの名無しさん [sage] 2018/10/09(火) 08:38:25.31 ID:IIAdkwpd 画面クリアは普通にcls打つのと何が違うん? http://mevius.5ch.net/test/read.cgi/tech/1489207631/884
885: デフォルトの名無しさん [sage] 2018/10/09(火) 11:35:59.50 ID:9WevvN1n 時刻表示ならプロンプト変えたら? clsは>>884 クリップボード履歴管理系のアプリ使ってる人には無用? http://mevius.5ch.net/test/read.cgi/tech/1489207631/885
886: デフォルトの名無しさん [sage] 2018/10/09(火) 15:53:20.49 ID:hXgFZ2lj >>884 一文字でいいので、お菓子を食べながらでもできる、大差 http://mevius.5ch.net/test/read.cgi/tech/1489207631/886
887: デフォルトの名無しさん [sage] 2018/10/10(水) 17:37:49.95 ID:Wl83IH5q そういうしょぼいものならdoskeyでも使っとけ http://mevius.5ch.net/test/read.cgi/tech/1489207631/887
888: デフォルトの名無しさん [sage] 2018/10/11(木) 22:01:20.44 ID:aIIKUaH8 1文字とか何かで誤爆しそうで危うすぎる http://mevius.5ch.net/test/read.cgi/tech/1489207631/888
889: デフォルトの名無しさん [] 2018/10/12(金) 00:17:12.22 ID:xVyRtSc0 くだらねー http://mevius.5ch.net/test/read.cgi/tech/1489207631/889
890: デフォルトの名無しさん [sage] 2018/10/13(土) 05:37:42.36 ID:YmkYzRio copyコマンドがおかしい copy x+y z とするとzに改行追加されている copy /B x+y z だと問題なしだが?? http://mevius.5ch.net/test/read.cgi/tech/1489207631/890
891: デフォルトの名無しさん [sage] 2018/10/13(土) 07:34:07.12 ID:TS7U3WRI >>890これね ttp://shigechi-64.hatenablog.com/entry/20090717/1247798200 http://mevius.5ch.net/test/read.cgi/tech/1489207631/891
892: デフォルトの名無しさん [sage] 2018/10/13(土) 19:25:44.82 ID:fQqIQRVk 改行じゃなくて 0x1A の 1byte なら付加されるが echo test> a dir a copy a /b + nul /a dir a サイズが 1byte 増える http://mevius.5ch.net/test/read.cgi/tech/1489207631/892
893: デフォルトの名無しさん [sage] 2018/10/14(日) 01:22:10.62 ID:IWBgfNe4 >>891 以前から知られていたのですね そのサイトはウィルス注意報が出たので見ませんでしたが http://mevius.5ch.net/test/read.cgi/tech/1489207631/893
894: デフォルトの名無しさん [sage] 2018/10/14(日) 06:32:47.46 ID:5zXkQKrC テキストファイルのEOF(0x1A)は前世紀の遺物 昔のテキストエディタはファイルの末尾にEOF(0x1A)を付加していた。 仕様が古すぎて今じゃCOPYのヘルプを見ても、詳細が分からん状態 copy でファイルを連結する時は /a がデフォルト ちなみに copy /a はEOF(0x1A)を付加するだけじゃないぞ ファイルの途中に0x1Aが有ったらそれ以降が無くなってしまう怖い仕様 あと、echo xxx >> とかでテキストを追加したら末尾の0x1Aは勝手に削除される http://mevius.5ch.net/test/read.cgi/tech/1489207631/894
895: デフォルトの名無しさん [sage] 2018/10/14(日) 09:07:44.01 ID:YBMQaeBO >>30 >>31 ずいぶん昔の質問で悪いんだが これって全ての引数を意味する「%*」に起動時のコマンドラインは含まれないってこと? http://mevius.5ch.net/test/read.cgi/tech/1489207631/895
896: デフォルトの名無しさん [sage] 2018/10/14(日) 18:08:37.67 ID:gwXaIkcp chcp 65001入ってるスクリプトをUTF-8で保存して動かしてみたらエスケープ処理が酷い・・・ http://mevius.5ch.net/test/read.cgi/tech/1489207631/896
897: デフォルトの名無しさん [sage] 2018/10/15(月) 01:28:48.04 ID:yVBNeV/e >>895 そうです バッチはいろいろ癖があるので、そんなものだと思うしかないです 別件 echo %* shift echo %* rem %* はshiftされない http://mevius.5ch.net/test/read.cgi/tech/1489207631/897
898: デフォルトの名無しさん [sage] 2018/10/16(火) 00:24:50.38 ID:GeydM3gl >>897 The shift command has no effect on the %* batch parameter. https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/shift SHIFT doesn't affect %* https://stackoverflow.com/questions/12990480/shift-doesn-t-affect http://mevius.5ch.net/test/read.cgi/tech/1489207631/898
899: デフォルトの名無しさん [sage] 2018/10/25(木) 05:27:15.65 ID:cKUaktMr echo %__APPDIR__% C:\Windows\SysWOW64\ これが出る時32ビットのコマンドプロンプトらしいんですが 64ビットのコマンドプロンプトと何か違うんでしょうか http://mevius.5ch.net/test/read.cgi/tech/1489207631/899
900: デフォルトの名無しさん [sage] 2018/10/27(土) 11:16:03.78 ID:NXHcy7gB reg query "HKU\.DEFAULT\Control Panel\International" 表示された最後の行に HKEY_USERS\.DEFAULT\Control Panel\International\・・・・・・ これは何だろうとレジストリエディタで見ると謎の文字で地球が3つ。 しかしメモ帳で表示出来る文字が コンソール画面で表示出来ないのはダメだね http://mevius.5ch.net/test/read.cgi/tech/1489207631/900
901: デフォルトの名無しさん [sage] 2018/10/27(土) 12:02:14.11 ID:8ILfgags メモ帳「俺はだいぶ前からユニコード対応済みだから表示はするさ、ANSI(CP932)で保存はできなくてもなー」 http://mevius.5ch.net/test/read.cgi/tech/1489207631/901
902: デフォルトの名無しさん [sage] 2018/10/27(土) 12:15:54.46 ID:NXHcy7gB DIRコマンドでもユニコード対応してるよね。ちゃんと表示される。 でもこの地球文字はDIRコマンドでも表示されないようだ フォントの問題かねえ http://mevius.5ch.net/test/read.cgi/tech/1489207631/902
903: デフォルトの名無しさん [sage] 2018/10/27(土) 13:14:57.64 ID:8ILfgags フォント問題だね、 メモ帳とかレジストリエディタはフォントリンクで表示用フォントが持ってないコードも他のフォントにあればそれで代用表示するから http://mevius.5ch.net/test/read.cgi/tech/1489207631/903
904: デフォルトの名無しさん [sage] 2018/10/27(土) 15:49:46.95 ID:IkTi26EG なんだよ地球文字って? http://mevius.5ch.net/test/read.cgi/tech/1489207631/904
905: デフォルトの名無しさん [sage] 2018/10/27(土) 16:16:07.64 ID:NXHcy7gB https://www.charbase.com/1f30e-unicode-earth-globe-americas https://www.charbase.com/1f30f-unicode-earth-globe-asia-australia https://www.charbase.com/1f30d-unicode-earth-globe-europe-africa http://mevius.5ch.net/test/read.cgi/tech/1489207631/905
906: デフォルトの名無しさん [sage] 2018/10/27(土) 16:59:45.97 ID:r0d5m4I8 そんな文字(絵文字?)があるのか。 初めて見て、びっくり。(; ̄Д ̄) http://mevius.5ch.net/test/read.cgi/tech/1489207631/906
907: デフォルトの名無しさん [sage] 2018/10/27(土) 17:04:05.15 ID:NXHcy7gB それ、右上のリンクを押したら色々出て来て笑える http://mevius.5ch.net/test/read.cgi/tech/1489207631/907
908: デフォルトの名無しさん [sage] 2018/10/27(土) 22:17:46.77 ID:8ILfgags for /f %a in ('dir /b') do echo %~za,%~ta なんてことできたんだねえ、 dir /bは他の属性情報を削いでるからできないと思い込んでた http://mevius.5ch.net/test/read.cgi/tech/1489207631/908
909: デフォルトの名無しさん [sage] 2018/10/28(日) 08:43:59.31 ID:uzLWPyey >>908 dirで取得した情報使うわけじゃないから カレントにxxx.txtとかのファイルがあれば for /f %a in ("xxx.txt") do echo %~za とかできるよ http://mevius.5ch.net/test/read.cgi/tech/1489207631/909
910: デフォルトの名無しさん [sage] 2018/10/28(日) 11:17:25.40 ID:ecNurFe9 dpnxfだったら単にファイル名にカレントのパスを付けるだけだからチグハグでも出来ちゃうんだぜ aaa.txtっていうファイルがカレントに存在してなくても構わないってことだ pushd d:\xxx\yyy for /f %a in ("aaa.txt") do echo %~fa ってやれば、d:\xxx\yyy\aaa.txtっていう架空のファイルのフルパス名を表示してくれる http://mevius.5ch.net/test/read.cgi/tech/1489207631/910
911: デフォルトの名無しさん [sage] 2018/10/28(日) 20:39:42.80 ID:5N/SSOj8 >>905 俺のブラウザが古いのかうまく表示されなかったけど、これか。 http://i.stack.imgur.com/DQ2Ls.png http://mevius.5ch.net/test/read.cgi/tech/1489207631/911
912: デフォルトの名無しさん [] 2018/10/29(月) 00:52:54.50 ID:m4kOmKq3 質問です。 データが以下のように入っているcsvファイルを 指定された削除対象のファイル名の行を削除したいです。 削除対象は別ファイルに一覧としてあります。 イメージとしては以下のようにしたいです。 bass.csv ================================ ファイル名,日付,時間 AAA,20111001,1300 AAB,20171001,1300 AAC,20171031,1300 AAD,20171031,1300 ================================ delete.txt ================================ AAB AAD ================================ output.csv ================================ ファイル名,日付,時間 AAA,20111001,1300 AAC,20171031,1300 ================================ OSはWindows7 コマンド(batでもOK)でoutput.csvのような形にしたいのですが 上手くいかず、findstr /V で1行だけ試しにやってみたら理想と近い形になったのですが、 削除対象が複数になると上手くいきませんでした。 http://mevius.5ch.net/test/read.cgi/tech/1489207631/912
913: デフォルトの名無しさん [sage] 2018/10/29(月) 06:11:32.56 ID:VYDzXbvz ? findstr /v "AAA AAD" bass.csv>output.csv で行くはずだがだめだった? これが行ければ除外パターンを作るfor /f文を前段に作るだけで終わると思うが http://mevius.5ch.net/test/read.cgi/tech/1489207631/913
914: デフォルトの名無しさん [sage] 2018/10/29(月) 06:59:07.30 ID:VYDzXbvz 行けるじゃん…そういえばfindstrは/gオプションあるから、for文も要らんね findstr /v /g:delete.txt bass.csv>output.txt なおfindstrの複数検索パターン指定は和文だと失敗する。 英数字の検索なら問題なし http://mevius.5ch.net/test/read.cgi/tech/1489207631/914
915: デフォルトの名無しさん [sage] 2018/10/29(月) 07:23:43.41 ID:g89iCylL よくわからんが FINDSTR /B にして検索文字列のあとに , を付ければいいんじゃね http://mevius.5ch.net/test/read.cgi/tech/1489207631/915
916: デフォルトの名無しさん [sage] 2018/10/29(月) 07:26:06.09 ID:g89iCylL あ、/I も付ければいいかも http://mevius.5ch.net/test/read.cgi/tech/1489207631/916
917: デフォルトの名無しさん [sage] 2018/10/29(月) 08:03:30.04 ID:VYDzXbvz 行頭以外にAAAやAADが記述されており、それは出力したいなら /B は合った方がいい http://mevius.5ch.net/test/read.cgi/tech/1489207631/917
918: デフォルトの名無しさん [sage] 2018/10/29(月) 08:12:46.70 ID:VYDzXbvz 訂正 AABやAADが だった http://mevius.5ch.net/test/read.cgi/tech/1489207631/918
919: デフォルトの名無しさん [sage] 2018/10/29(月) 08:15:25.80 ID:g89iCylL 無いとファイル名の部分一致するかも 拡張子あるなら末尾の , は要らんかも 和文ダメなんだ知らんかった http://mevius.5ch.net/test/read.cgi/tech/1489207631/919
920: デフォルトの名無しさん [sage] 2018/10/29(月) 09:16:39.77 ID:g89iCylL >>912 和文無ければ不要のバッチ @echo off & setlocal & set /a n=0 for /f "delims=" %%i in (delete.txt) do set "s=%%i" & call :x if %n%==0 (goto :eof ) else set /a n-=1 echo ファイル名,日付,時間> output.csv for /f "skip=1 delims=" %%i in (bass.csv) do set "s=%%i" & call :y goto :eof :x set "d%n%=%s%" & set /a n+=1 & goto :eof :y for /f "delims=," %%j in ("%s%") do set "s1=%%j" & call :z goto :eof :z setlocal enabledelayedexpansion for /L %%k in (0,1,%n%) do if /i "!s1!"=="!d%%k!" goto :eof echo !s!>> output.csv http://mevius.5ch.net/test/read.cgi/tech/1489207631/920
921: デフォルトの名無しさん [sage] 2018/10/29(月) 09:25:17.80 ID:g89iCylL >>920 3行目訂正 if %n%==0 (copy bass.csv output.csv & goto :eof ) else set /a n-=1 http://mevius.5ch.net/test/read.cgi/tech/1489207631/921
922: デフォルトの名無しさん [sage] 2018/10/29(月) 10:42:05.23 ID:VYDzXbvz おいらが書くならこう @echo off setlocal enabledelayedexpansion for /f %%a in (delete.txt) do set list=!list!,%%a set list=%list:,= % for /f "delims=" %%b in (bass.csv) do ( set "line=%%b" set /a flg=0 for %%b in (%list%) do ( echo !line!|findstr /b /v "%%b">nul 2>&1 set /a flg +=!errorlevel! ) rem echo !cnt! if !flg! equ 0 echo !line!>>output.txt ) pause http://mevius.5ch.net/test/read.cgi/tech/1489207631/922
923: デフォルトの名無しさん [sage] 2018/10/29(月) 11:13:29.52 ID:K68WvpFD >>899 x64だと C:\Windows\System32\ x64だと64bitで書いたアプリもあるのでフォルダで区別 ここらへんwindows自体が手品のようなことをしていていわば巨大ウィルスソフト化 x64はintelの失敗作、性能を優先しすぎて使い勝手が大幅に悪くなった http://mevius.5ch.net/test/read.cgi/tech/1489207631/923
924: デフォルトの名無しさん [sage] 2018/10/29(月) 11:17:19.87 ID:P47cxv7B CSVのフィルタ処理をバッチでやろうとは思わないけど参考になった http://mevius.5ch.net/test/read.cgi/tech/1489207631/924
925: デフォルトの名無しさん [sage] 2018/10/29(月) 11:21:43.07 ID:VYDzXbvz すまん、>>922の内側のfor分の %%変数は%%cの方がよかった。 ローカル変数的な振る舞いで動作上は問題ないけど http://mevius.5ch.net/test/read.cgi/tech/1489207631/925
926: デフォルトの名無しさん [sage] 2018/10/29(月) 11:39:07.63 ID:wCs1yHBV 先輩方、お知恵ありがとうございます。 情報の後出しとなってしまって大変申し訳ありません。 ファイル名には枝番がふられているものがあり、 delete.txtに記載されている「AAB」を削除指定すると枝番01,02の記載迄消えてしまう為 ファイル名と完全一致の行のみを削除するにはどのようにすれば良いかお知恵をお借りしたかった次第です。 bass.csv ================================ ファイル名,日付,時間 AAA,20111001,1300 AAB,20171001,1300 AAC,20171031,1300 AAD,20171031,1300 AAB01,20111001,1300 AAB02,20111001,1300 ================================ delete.txt ================================ AAB AAD ================================ output.csv ================================ ファイル名,日付,時間 AAA,20111001,1300 AAC,20171031,1300 AAB01,20111001,1300 AAB02,20111001,1300 ================================ http://mevius.5ch.net/test/read.cgi/tech/1489207631/926
927: デフォルトの名無しさん [sage] 2018/10/29(月) 11:41:47.37 ID:VYDzXbvz delete.txtにカンマ加えて書けばいいんでないの? AAB, AAD, http://mevius.5ch.net/test/read.cgi/tech/1489207631/927
928: デフォルトの名無しさん [sage] 2018/10/29(月) 11:55:18.87 ID:g89iCylL >>926 >>920でOK >>922 delete.txtの中の テキストに半角スペースや ! 文字があると誤動作 http://mevius.5ch.net/test/read.cgi/tech/1489207631/928
929: デフォルトの名無しさん [sage] 2018/10/29(月) 12:31:59.63 ID:g89iCylL >>926 もし>>920を使うなら>>921で訂正してください http://mevius.5ch.net/test/read.cgi/tech/1489207631/929
930: デフォルトの名無しさん [sage] 2018/10/29(月) 13:38:05.43 ID:SulfyTCP >>923 質問は64bitならどういう値になるって質問ではなくて、 32bitの場合と64bitの場合とで機能・動作的に何が違うの? って意味だと思うけど http://mevius.5ch.net/test/read.cgi/tech/1489207631/930
931: デフォルトの名無しさん [sage] 2018/10/29(月) 13:42:01.94 ID:t/dvzEws >>930 違うよ http://mevius.5ch.net/test/read.cgi/tech/1489207631/931
932: デフォルトの名無しさん [sage] 2018/10/29(月) 13:43:07.31 ID:VYDzXbvz >>928 半角スペースはケアレス、!は全く気にしていなかった。勉強になった。有難う http://mevius.5ch.net/test/read.cgi/tech/1489207631/932
933: デフォルトの名無しさん [sage] 2018/10/29(月) 22:11:24.00 ID:BnWHDqaq Ruby で作った require 'csv' delete_files = { } # 削除するファイル名を入れる、ハッシュ text = <<TEXT AAB AAD TEXT # 改行区切りで、改行を除去してから、ハッシュに入れる text.each_line do | line | # 各行 line.chomp! # 末尾の改行を削除する next if line.empty? # 空行は処理しない delete_files[ line ] = true end # コロン区切りのCSV 入力ファイルを、1行ずつ処理する CSV.foreach( "bass.csv" ) do |row| # 削除対象ファイルの行は、出力しない puts row.join( "," ) unless delete_files.has_key? row[ 0 ] end http://mevius.5ch.net/test/read.cgi/tech/1489207631/933
934: デフォルトの名無しさん [sage] 2018/10/29(月) 22:24:44.16 ID:XpqRFBWF 地球はチタマと読むのです http://mevius.5ch.net/test/read.cgi/tech/1489207631/934
935: 899 [sage] 2018/10/30(火) 17:29:47.50 ID:GfHx62hK >>923 レスありがとうございます。 OSはwin10x64で実行されたcmdの呼び出し元は C:\Program Files (x86)にあるアプリケーションです %__APPDIR__%はC:\Windows\SysWOW64\ %ComSpec%はC:\WINDOWS\system32\cmd.exe 左上にある窓のtitleは%ComSpec%と同じで、何か変です タスクマネージャーにはコマンドプロンプト(32ビット)と出ます OSから直接cmdを起動したら(32ビット)は出ません OSが自分自身を騙してるのでしょうか たぶん機能上は違いが無いと思いますが http://mevius.5ch.net/test/read.cgi/tech/1489207631/935
936: デフォルトの名無しさん [sage] 2018/10/30(火) 17:53:27.44 ID:ZaLbntHv その呼び出してるアプリが32bitアプリなのだと予想 http://mevius.5ch.net/test/read.cgi/tech/1489207631/936
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 66 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.024s