10/06/27 20:50:36 9xWXQ4dR
>>373
あー確かにWin7だとうまく動作しないっぽいね
じゃあPowerShellとか使ってWMIのクラスを叩くくらい?丁度Win7から標準搭載だし
ComponentsMultiMediaCDROMの場合なら
gwmi Win32_CDROMDrive
で済むと思うけど
ComponentsUSBと同じものを拾うとしたら、Win32_PnPEntityから
それっぽい文字列になってるものを選りすぐるとか
そういう泥臭いのしかないんじゃないかなぁ
gwmi Win32_PnPEntity | ? { $_.Description -match "HID|USB|マウス" }
しかしなんでmsinfo32の機能縮小したんだろね
375:369
10/06/28 17:46:44 F78fsBFc
>>374
確かに機能縮小は謎ですね・・。
PowerShellはあまり使った事ありませんが
コマンドまで書いていただいたので地道に勉強してみます。
ありがとうございました。
376:名無し~3.EXE
10/06/30 19:30:37 YR7y5Xjc
MiB=メンインブラック
URLリンク(ja.wikipedia.org)
377:名無し~3.EXE
10/07/01 03:20:44 QN9kIZnS
メビバイト
378:名無し~3.EXE
10/07/01 10:28:01 XJLs82t6
WSHやPowerShellでは何てことないのにコマンドプロンプトからだとかなり手間かかるのに
ユーザシェルフォルダーの実パス取得があるな
379:名無し~3.EXE
10/07/01 15:29:42 MJ7cvx7N
そんな簡単なことにかなり手間がかかるとは
380:名無し~3.EXE
10/07/04 19:32:54 Us0ZSBPD
>>378
「教えてください」の婉曲話法?
381:名無し~3.EXE
10/07/06 08:16:48 rSqQSwGr
>378
VBScriptファイル(WSH)側で実パス取得~Echoメソッドでコンソール出力し、
その結果をバッチファイル(コマンドプロンプト)側で環境変数に入れるのが、
やはり無難だろうね。Windows9x系では使えない方法だが。
382:名無し~3.EXE
10/07/06 20:51:35 /e4Hb8z4
ファイル更新日時の秒まで表示する方法ってないですか?
dirも昔に比べればだいぶ機能追加されたのに、これくらいの拡張機能は付けてくれてもいいのに。。。
383:名無し~3.EXE
10/07/06 21:48:04 /FuRxImU
はい
384:名無し~3.EXE
10/07/07 03:57:50 U5LqLdYh
dirに求めるんじゃなくてファイルシステムに求めるもんだからなぁ
385:名無し~3.EXE
10/07/07 07:48:21 vgLuymmP
ファイルシステムは秒の情報持ってるだろ
386:名無し~3.EXE
10/07/07 10:38:35 oGcD6RCh
FATだと2秒単位だけどな
387:名無し~3.EXE
10/07/07 10:57:56 Om1IrP0e
FAT16の場合だろ?
388:名無し~3.EXE
10/07/07 12:52:39 h2MR7EZe
FAT32は2秒
389:名無し~3.EXE
10/07/07 13:37:57 t9G7XhUG
FAT12/16/32は秒の情報を5ビットで持ってるから2秒単位だったな。
exFATは10ミリ秒単位で秒を記録できるようになったらしいが。
390:名無し~3.EXE
10/07/07 14:54:27 6szdPZ9L
ファイル更新日時の2秒まで表示する方法ってないですか?
dirも昔に比べればだいぶ機能追加されたのに、これくらいの拡張機能は付けてくれてもいいのに。。。
391:名無し~3.EXE
10/07/07 15:15:19 xJAkUjN5
「秒とかバイトとか、細けえことはどうでもいいんだよ」というのが
MSの設計思想じゃないのか?
エクスプローラでのファイルサイズは、キロバイト単位でしか出ないし。
何?プロパティ?ファイルが1000個あったらどーすんだ?
あれが「人に優しいUI」だと思ってるのかね。
んでもって馬鹿企業は、フリーソフト導入一切禁止とくるからなw
392:名無し~3.EXE
10/07/07 20:19:49 h2MR7EZe
PowerShell なら 0.1 マイクロ秒まで表示できるな
393:名無し~3.EXE
10/07/07 20:23:57 h2MR7EZe
でも精度的にはミリ秒までかな
394:名無し~3.EXE
10/07/07 20:45:40 c7nJp2FA
そうかPowerShellがあったなぁ。
・・・出たての頃インスコしただけで難しそうで即挫折したけどがんばって勉強しようかなぁ。。。
395:名無し~3.EXE
10/07/07 20:57:04 c7nJp2FA
あと思い出したけど、NTFSのマルチストリームの情報を扱う手段も
ぜんぜん提供されないね。エクスプローラとかGUIでもそうだけど。
いちおうdirでは見れるようになったけど何か中途半端な扱いだし。
そもそもdirでもエクスプローラでも何でもそうだけど、
ファイルのサイズとして表示する数字の中に代替ストリームの
サイズが含まれてないってすごく変だけど、それすら改善する気は
ないのかなぁ。。。
396:名無し~3.EXE
10/07/07 21:08:16 G5zQV+Xi
パフォーマンスのとてつもない劣化と引換の改善なんか誰がやるか
397:名無し~3.EXE
10/07/07 21:26:40 c7nJp2FA
dirで/rの有無で比べるくらいだとそんなに劣化してないっぽいけどねぇ。
398:名無し~3.EXE
10/07/08 01:53:36 VY4uFioD
cygwin入れといて
ls -l --time-style=full-iso
399:名無し~3.EXE
10/07/08 10:21:39 WJ0dgMNJ
powershellでdirとやっても秒が出ないが、どうやるの?
400:名無し~3.EXE
10/07/08 13:17:45 A4sgn4ig
パソコンド素人なんですけど、コマンドライン等の勉強したいんですが、いい教科書等ありますか?
401:名無し~3.EXE
10/07/08 15:56:59 YFxuaHp+
ド素人はなにがやりたくてコマンドラインを使おうと思ったの?
402:名無し~3.EXE
10/07/08 18:40:56 mSeEMGGW
標準MS-DOSハンドブック
403:名無し~3.EXE
10/07/08 20:37:56 hO02yzdC
>>401
パソコンがド素人ってだけでワークステーションには習熟してるかもしれないじゃないか。
404:名無し~3.EXE
10/07/08 21:08:31 rnHHmOkM
>>395,397
お前リパースポイントと代替データストリーム混同してないか
405:名無し~3.EXE
10/07/08 22:09:58 9JFP55i9
>>404が混同してる悪寒
406:名無し~3.EXE
10/07/09 00:19:41 Iz5FPOV3
>>399
ls | select {$_.Name},{$_.LastWriteTime.ToString("o")}
407:名無し~3.EXE
10/07/09 01:16:52 YBwYJTPj
>>401-402-403
何がしたいと言う訳では無いのですが、
時間に余裕も出て来たので、何か勉強しようかなと思いまして。
どうせなら全く分からないものでもしてみようかと。
408:名無し~3.EXE
10/07/13 14:03:52 Idvtsd89
確かにVista/7だとmountvolコマンドがアクセス権絡みの問題で使い物にならないわ
409:名無し~3.EXE
10/07/14 00:48:10 18dmiFV+
>>407
教科書やドリルみたいなの買うと課題の不毛さに後悔するから
技術評論社のポケットリファレンスシリーズみたいな
手元に置いてパッと引けるようなのが一冊あると便利
でも先にコマンドを使う目的を見つけた方がいいと思うよ
目的がないと使い道がないから学んでも頭に入らないと思う
「毎日毎日手作業でファイルコピーしてるけど面倒くさくて嫌になった」
↓
「なんか金のかからない方法で自動化したい」
↓
「コピーコマンドを連ねてバッチファイルを作ればできるらしい」
↓
「じゃあまずコピーコマンドってのが何なのか知ろう」
みたいにさ
410:名無し~3.EXE
10/07/14 02:32:26 VDWtT12a
それだと逆引き系のリファレンスgだな
411:名無し~3.EXE
10/07/14 11:48:41 o241LDmC
先日環境をXPから7に移したんですが、XPには無くて7にはあるコマンド類または
その逆を解説したようなサイトがあれば教えてください。
別に全コマンドの解説でもかまいません。
412:名無し~3.EXE
10/07/14 12:27:19 o241LDmC
ちなみにWindows7にはXPにあったntcmds.chmのようなのは無いんでしょうか?
413:名無し~3.EXE
10/07/14 15:15:12 8OLeN+Q5
>>409
知りたい機能だけ調べるってやり方だと、
知ってると便利な機能や小技を見落としたままってことがあるんだよな。
414:名無し~3.EXE
10/07/14 15:38:45 DWnN3+Gm
>>412
URLリンク(support.microsoft.com)
ここから抜け
415:名無し~3.EXE
10/07/14 20:50:55 o241LDmC
>>414
Win7とは結構違う模様。
416:名無し~3.EXE
10/07/14 22:23:30 khPkUWCA
たしかに同意。
今日びのWindowsのコマンドプロンプトの存在意義って、どっちかっつーと
なんかニッチな理由とか事情があって使うニッチな手段って感じのものだから、
具体的な利用目的もなしにゼロから勉強がしたいからって学ぶんであれば、
VBSとかの高機能で汎用的なスクリプト言語やJavaとかC++とかの開発言語を
勉強したほうが使い道広くて楽しいと思う。
あと、コマンドの世界って、シロート目にはけっこう複雑そうに見えるかもしれないけど
それほど奥行きある世界じゃないから、そういう他の言語を触ったことある人なら
すぐに使えるようになるし。
417:名無し~3.EXE
10/07/14 22:39:46 DWnN3+Gm
Windows Command Reference
URLリンク(www.microsoft.com)
418:名無し~3.EXE
10/07/15 00:24:52 9HG2F3kZ
俺の時代はこれが評判よかったな。
URLリンク(bookweb.kinokuniya.co.jp)
当時のこの手の書籍の中では頭抜けてマニアックで面白かった。
もう内容古いから探して入手するほどの価値ないだろうけど。
419:名無し~3.EXE
10/07/15 00:58:11 +yt3bVbq
NTナツカシスw
俺もそういうのいっぱい買ったわー
>>411
[スタート]→[ヘルプとサポート]あたりで「リファレンス」で検索すると
コマンドラインのリファレンスを呼び出せない?
XPには標準でそういうのがあるよ
無料だし構文や使用例も載っててヒョイと引くのに便利
420:名無し~3.EXE
10/07/15 14:58:19 8KdjHHcI
>>411
URLリンク(technet.microsoft.com)(WS.10).aspx
421:名無し~3.EXE
10/07/28 18:19:36 e7q9P674
コマンドプロンプトで 「@」 てのは どういう意味、用法で使いますか。
422:名無し~3.EXE
10/07/28 19:04:26 ZQnjYQxV
>>421
ファイル名として使用できる文字です。
またバッチファイルでコマンドの前に記入すると一時的にコマンドエコーをOFFにできます。
この機能が実装される前はバッチファイルを実行すると echo off だけは必ず表示されてしまいました。
また一部のプログラムではレスポンスファイルを指定するために利用されていましたが
これは各プログラムの独自仕様にすぎません。
423:421 です
10/07/28 20:05:36 e7q9P674
>>422
早速のご回答ありがとうございます。
ちょっと時間を掛けて理解してみます。
424:名無し~3.EXE
10/07/29 02:33:02 VEGuyEZw
@@@@@@@@@@@
425:名無し~3.EXE
10/07/29 17:14:29 GRiVPKFE
コマンドラインでループを見たくない時
for /f %i in ('dir /b') do @(echo %i | find "hoge")
よくこんな風にブロックの前に付けて使う
426:名無し~3.EXE
10/08/05 18:43:52 IZFsq8v1
コマンドプロンプトでPATH文字列から最後のフォルダ名のみ取得する方法ないですか?
例
c:\hoge\piyo\fuga → fuga
って感じです。
よろしくお願い致します。
427:名無し~3.EXE
10/08/05 20:29:51 5Vz2vpqJ
>>426
>>281
428:名無し~3.EXE
10/08/05 23:12:58 IZFsq8v1
>>427
ありがとうございます。
>>281 難しいですねぇ・・・・。
理解するまで20分ぐらいかかった気がします・・・。
hoge\piyo\fuga\
で&で繋いで連続置き換えした場合
hoge\ → hoge に
piyo\ → piyo に
fuga\ → fuga に
それぞれ置き換えられて、それが上書きされ続けるから
fuga が最終的な結果として残るんですね・・・。
Linuxなら
$ basename $PWD
だけでいけるんすけどね・・・。Batは大変ですねぇ・・・。
429:名無し~3.EXE
10/08/05 23:49:15 5Vz2vpqJ
>>428
GnuWin32 の basename.exe を使うか PowerShell で
(New-Object System.IO.DirectoryInfo c:\hoge\piyo\fuga).Name
とするかだな
430:名無し~3.EXE
10/08/06 00:54:06 sHYY4gZ4
>>429
いや、わざわざそんな書き方せんでもgi(Get-Item) 使えばいいだろw
431:名無し~3.EXE
10/08/06 08:07:40 UgjC01NQ
>>430
存在しないパスだと実行できないでしょ
432:名無し~3.EXE
10/08/06 14:58:00 JpyntOt0
>>428
> hoge\piyo\fuga\
> で&で繋いで連続置き換えした場合
>
> hoge\ → hoge に
> piyo\ → piyo に
> fuga\ → fuga に
> それぞれ置き換えられて、それが上書きされ続けるから
> fuga が最終的な結果として残るんですね・・・。
そうじゃなくて>>281。
433:名無し~3.EXE
10/08/06 16:04:26 P08HpVjX
最後に\が付いてるとNGだけどな。
434:名無し~3.EXE
10/08/06 21:37:36 vLVu3Wuc
>>431
そこまで求められてるのかわからんが、それでも Split-Path -Leaf 程度でいいと思う
435:名無し~3.EXE
10/08/19 00:49:29 AKG7vMGF
おすすめのコマンド教えろ
436:名無し~3.EXE
10/08/22 22:19:40 SHfyvJzx
cls
オヌヌメ
437:名無し~3.EXE
10/09/08 11:47:09 ExZrz259
専ブラにタスクトレイに収納はあるが、タスクバーに最小化がないから
Alt+Space Nで強引にやるという方法を思いついたんだがどうやって再現すればいいのかな?
最小化で起動とかじゃなくて現在開いてる専ブラ『を』最小化させたい
438:名無し~3.EXE
10/09/08 19:50:56 IChAHWQA
test1.txt
test2.txt
test3.txt
・
・
・
を
for %%I in (*.txt) do rename %%I n%%I
ってやると、
他は ntest*.txt になるのに、最初のtest1.txtだけが
二度処理されて、nntest1.txtになるんだけど、何故に?
ちなみに
for %%I in (*.*) do rename %%I n%%I
だとこれは起きない。
439:名無し~3.EXE
10/09/08 22:10:31 ESa0VeB7
for %%I in (*.txt) do rename %%I n%%I & sleep -n 10
440:名無し~3.EXE
10/09/08 22:14:09 5DxQlPUb
>>438
ならねーよ@Win7x64
441:名無し~3.EXE
10/09/09 17:52:31 C/P/KViw
>>440
おや、汲み取り式便所のカマドウマさん、お久しぶりです。
すみません、
atest.txt
btest.txt
ctest.txt
で、もっかい試して下さい。
442:名無し~3.EXE
10/09/12 03:40:50 O8l7L6qY
>>441
ならねーよ@FAT
443:名無し~3.EXE
10/09/12 22:37:50 9HrE/Va3
おや、カメムシさん。こんばんは。
7の64でお試し下さい。
バグ見つけるのって、そんなに
珍しいのか?
444:名無し~3.EXE
10/09/13 01:41:02 307mnpFn
誰と戦ってるの?
445:名無し~3.EXE
10/09/14 00:25:01 g2qAWX+s
>>435
リファレンスくらい買えよ。
>>444
バグに決まってんだろw
446:名無し~3.EXE
10/09/14 03:22:10 OWWZ72hR
NTFSの仕様だろ
447:名無し~3.EXE
10/09/14 03:39:20 I0Da5NkL
これでなった
for /l %I in (0,1,9) do echo a>>test%Itxt
for /l %J in (0,1,9) do for %I in (*.*) do ren %I %J%I
448:名無し~3.EXE
10/09/15 11:46:31 eJPlDDZ+
コマンドプロンプトからファイルサーバの認証通すコマンドはないでしょうか?
すみません、上手く言葉で伝えられないので、現状とやりたいことを書きます。
自端末からは自分のドメインアカウントでアクセスします。
※(自端末)-->(ファイルサーバ)
サーバ作業ではサーバのAdministratorでリモート接続しています。
※(自端末)-->(サーバ)
サーバ作業でファイルサーバにアクセスする必要が生じたため、
サーバからファイルサーバへは自分のドメインアカウントでアクセスします。
※(自端末)-->(サーバ)-->(ファイルサーバ)
このとき、エクスプローラでファイルサーバを開く場合は、
ダイアログでユーザ名とパスワードを聞かれるので問題ありません。
また、そのとき認証した後であれば、
> dir "\\fileserver\folder"
で普通にアクセスできるのですが、
エクスプローラで一旦開いてダイアログで認証した後でないと、
「ログオン失敗: ユーザー名を認識できないか、またはパスワードが間違っています。」
でエラーとなってしまいます。
コマンド実行時にダイアログ表示でもコマンド上でIDとパスワードを入力でもよいので、
コマンドからファイルサーバへ認証されたいです。
以上、よろしくお願いいたします。
449:名無し~3.EXE
10/09/15 11:58:35 LDzuokxr
net use
450:名無し~3.EXE
10/09/23 12:26:56 ENQspaai
テキストファイル内を検索し、特定の文字列を含む行をすべて抽出して別のログファイルに
書き出すというバッチ処理をしたいのですが、書き出す段階で詰まってしまいました。
「文字列を含む行が一切見つからなければ、何もしない」
「文字列を含む行が一つ以上見つかり、かつ書き出し先のログファイルが存在しなければ新規に作成」
「文字列を含む行が一つ以上見つかり、かつ書き出し先のログファイルが既に存在していれば追記」
という風に処理したいのですが、条件分岐をどのように記述すればいいかわかりません。
知恵を貸してください、お願いします。
451:名無し~3.EXE
10/09/23 13:18:27 KL5j0g2H
grepの結果をファイルに書き出してサイズが0なら削除でいいんじゃね?
452:名無し~3.EXE
10/09/23 14:27:58 qg7tCsFX
>> で追記書き出しすればファイルがなくても勝手に新規作成してくれる
ファイルがあればもちろん追記
条件分岐いらんでしょ
453:名無し~3.EXE
10/09/23 17:34:11 ENQspaai
>>451-452
文字列を含む行が一切見つからず、かつ書き出し先のログファイルが存在しなければ
空のログファイルを作成をせずに、そのまま処理を終了したいです。
やはり一度ログファイルを作成して、ファイルサイズを判定して空なら削除という
処理をするしかないですか?
>> で追記処理を始める前に、findstrで文字列が見つかったかどうかで条件分岐できるのが理想です。
454:名無し~3.EXE
10/09/23 17:44:28 3l4EZa2f
じゃあそうしろ
455:名無し~3.EXE
10/09/23 21:35:10 KL5j0g2H
仕様上、標準出力をファイルにリダイレクトするなら、結果が空でもファイルは作られる。
だからファイルサイズで分岐してサイズが0なら削除すりゃいいと書いた。結果的に同じになるから。
対象ディレクトリに一瞬でもファイルが作られるのが嫌なら、
%tmp%にでも吐きだしてからサイズ判断してコピーすりゃいい。
それすら嫌なら何らかのスクリプト言語でも使っとけ。
456:名無し~3.EXE
10/09/23 22:08:13 csJcKMrT
forつかえばいいよ
for /f %%i in ('コマンド') do echo %%i>>hoge.txt
なければつくられないよ
457:名無し~3.EXE
10/09/23 23:49:49 DcnPYhE5
俺も一旦tempfileに書き出した後にhitした場合だけlogファイルにリダイレクト(>>)するなり
連結するなりした方が良いと思うがどうしてもというのなら、
OSによってerrorkevelの数値が異なってくるかも知れないが、win2k以降のfindstrだと
hitしたか、hitしなかったかは、errorlevel(又は%errorlevel%環境変数も使える)に通知される。
詳しくは、if /?で。
rem *** 一発目のfindstrは判定だけして結果は捨てる。hitしたら改めてfindstrをやり直す ***
findstr >nul
if errorlevel 1 (
echo no_hit
) else (
echo hit
)
458:名無し~3.EXE
10/09/24 21:33:40 3UIxp3Zh
>>455-457
ありがとうございます、一時ファイル出力して結合という方法があることをすっかり見落としてました。
検索した対象のファイル名+ヒットした各行という形式のログファイルにしたかったので
直接出力してファイルサイズ判定は都合が悪かったのですが、この方法なら目的を果たせます。
重ねてありがとうございます。
459:名無し~3.EXE
10/10/08 09:52:55 uwm9Vwqh
うーん、何かのプロセスが掴んでて削除できないファイルがある。
openfiles /Local on
して再起動して確認しても誰も掴んでない。
openfiles /Query /V
ってひょっとしてサービスプロセスが握ってるのは表示されない?
具体的にいうと、
TracサーバのApacheプロセスがlogファイル握ってるのに、
openfilesで確認できない。
サービスプロセスのも表示できて且つ強制的にdisconnectさせれるようなコマンドない?
460:名無し~3.EXE
10/10/09 00:51:26 t24JYLHL
filemon で調べられないんでしたっけ。
そういう場合、リブートする方が早いことが多いし、面倒がない。
apache 数分止まるけど。
461:名無し~3.EXE
10/11/15 11:23:52 cFdTFkqY
XP以降ではatコマンドでなくschtasksを使うべきと書いているページがあるのですが、
atでも問題ないのでしょうか?調べて、結局、GUIのタスクを利用したのですが、
テキストファイルを関連付けてあるemeditorでなく、システムのメモ帳で開いてしまいます。
コマンドラインでスケジュールすれば特定のエディターを指定できるのでしょうか?
462:名無し~3.EXE
10/11/15 13:04:04 iSeO6BmP
好きな方選べばよろし
エディタのexeの引数にファイル名を指定すればいいだけ
463:名無し~3.EXE
10/11/15 16:18:59 B3yLO2jo
XPはまだ使えるがVista以降はまあ使えんよ
464:名無し~3.EXE
10/11/15 22:01:26 x9QGtyJG
ATコマンドで登録したジョブはSYSTEM権限で実行されるので
ユーザプロファイルに情報を登録するようなジョブや
ネットワーク上の共有フォルダに接続するようなジョブなどの場合
かなり面倒くさい細工をしなくちゃならない(一応できなくはない)
SCHTASKSはジョブの実行者を設定できるので
ローカルの単なるユーザでもドメイン管理者アカウントでも
好きなユーザの権限で実行できる利点があるが
User権限でログインしてる時にSCHTASKSコマンドを実行すると
PowerUserやAdministratorなど上位の権限ではジョブを実行できない
(ジョブを仕掛けても失敗する)
XPの出た当初SCHTASKSは管理者アカウントにログオンし直さなくても
管理者権限でコマンドやファイルを実行できる方法として挙げられていたが
リソキの隅っこに「実はできないんだな(テヘ」と書いてあってムキーッとなった
雑談はさておき>>461
462氏の言わんとしているのは
emeditor.exe (ファイル名)
または
(フルパス)\emeditor.exe (ファイル名)
という指定をする事で目的のファイルをemeditorで開けると言ってくれている
ATコマンドで実行する場合は /interactive オプションつけれ
そうしないと実行しても自分にゃ見えない
465:名無し~3.EXE
10/11/16 00:00:16 A8alUq5F
schtasksでできなくてatを使うしかないってことは何かあったかな?
466:名無し~3.EXE
10/11/16 01:09:01 2nYdeYXU
Vistaでat/interactiveは使えなくなった
467:名無し~3.EXE
10/11/16 16:05:31 TDvzZuuK
どんどん使えない仕様になるな
468:461
10/11/16 17:20:16 O1xaQ4cs
>>462 >>464 サンクスです。いけますた。
469:名無し~3.EXE
10/11/23 20:55:37 vYKBvqL/
CSVファイル中の各フィールドを抽出して一端変数に格納し、それを引数として
実行ファイルに渡すという処理をバッチでやろうとしています。
サンプルとして以下のようなfor文を書きました。
--------------------------------------------------
for /F "USEBACKQ tokens=1-6 delims==," %%A in ("C:\test\hoge.csv") do (
echo "%%A" "%%B" "%%C" "%%D" "%%E" "%%F"
hogehoge.exe "%%B" "%%A" "%%D" "%%F" "%%C%%D" "%%E"
)
--------------------------------------------------
CSVファイルの中身が
test1,test2,test3,test4,test5,test6
のように連続して並んでいる場合は、問題なく変数%%A~%%Fに順序良く格納されるのですが
test1,test2,,test4,test5,test6
のように間に歯抜けのフィールドがあると、それより後ろのフィールドが繰り上がって
"test1" "test2" "test4" "test5" "test6" ""
のように左詰めで格納されてしまいます。これを
"test1" "test2" "" "test4" "test5" "test6"
といったように、歯抜けのフィールドはそのまま変数の中身もブランクに
もしくは次善策として半角スペースを代わりに格納するようにしたいのですが
for文以外の方法も含め、何かやり方はありますか?
470:名無し~3.EXE
10/11/23 21:28:41 HsWf4XRb
FOR /L の方が適切なんでない?
471:名無し~3.EXE
10/11/23 21:29:23 HsWf4XRb
ごめん
よく読んでなかった
CSXの中身か
472:名無し~3.EXE
10/11/23 22:54:24 ogLcfvq+
WSH の方が適切なんでない?
473:名無し~3.EXE
10/11/23 23:08:05 e+Jq/zMX
テキスト整形が得意 or CSVの読み書きのインターフェイスのあるスクリプト使う方が楽だよ。
474:名無し~3.EXE
10/11/24 02:15:15 9z2PCu2J
最初から空白を付加したcsvを作るようには出来ないのかな?
出来ないのなら後から整形すればいい
もちろん一旦作業ファイルを作らずとも二重forループで一気に書く方が良いかも知れんが。
setlocal EnableDelayedExpansion
@echo off
echo.>%temp%\tmp.csv
for /f "usebackq tokens=1* delims=" %%i in ("c:\hoge.csv") do (
set line=%%i
set line=!line:,,=, ,!
echo !line! >> %temp%\tmp.csv
)
endlocal
for /f "usebackq tokens=1-6 delims=," %%i in ("%temp%\tmp.csv") do (
echo %%i %%j %%k %%l %%m %%n
)
rem del %temp%\tmp.csv
475:名無し~3.EXE
10/11/24 02:34:19 9z2PCu2J
先頭がNULLの場合が抜けていた
最初のループ中でecho出力する直前に1行追加
if "!line:~0,1!" equ "," set line= !line!
476:名無し~3.EXE
10/11/24 02:59:52 9z2PCu2J
ああーダメだ。全部やり直し。
下から3行目は環境変数oに半角スペースを代入してくれ(投稿するときに削られてるだろうから)
@echo off
setlocal EnableDelayedExpansion
echo.>%temp%\tmp.csv
for /f "usebackq tokens=1* delims=" %%i in ("c:\hoge.csv") do (
set line=%%i
set line=!line:,= ,!
for /f "usebackq tokens=1-6 delims=," %%j in (`echo !line!`) do (
set j=%%j
set k=%%k
set l=%%l
set m=%%m
set n=%%n
set o=%%o
if "!j!" neq " " set j=!j:~0,-1!
if "!k!" neq " " set k=!k:~0,-1!
if "!l!" neq " " set l=!l:~0,-1!
if "!m!" neq " " set m=!m:~0,-1!
if "!n!" neq " " set n=!n:~0,-1!
if "!o!" equ "" set o=
echo '!j!' '!k!' '!l!' '!m!' '!n!' '!o!'
)
)
477:名無し~3.EXE
10/11/24 18:20:36 ISHB697F
こりゃだめだ
478:名無し~3.EXE
10/11/24 18:41:39 TgFKsTt0
"test1","test2","","test4","test5","test6"
みたいなCSVにしときゃ済む話では?
479:名無し~3.EXE
10/11/24 20:39:53 TgFKsTt0
無理やり前述のフォーマットにしてから読むパターン
@echo off
setlocal enableextensions enabledelayedexpansion
for /f "usebackq delims=" %%i in ("C:\test\hoge.csv") do (
set t=%%i
set t="!t:,=","!"
for /f "usebackq tokens=1-6 delims=," %%a in (`echo !t!`) do echo %%~a,%%~b,%%~c,%%~d,%%~e,%%~f
)
480:名無し~3.EXE
10/11/24 21:56:08 ISHB697F
a,"b,c",d
とかでもうまくいくか?
481:名無し~3.EXE
10/11/24 22:00:56 TgFKsTt0
せめて試してから聞けよ
482:名無し~3.EXE
10/11/24 22:35:15 w7d1oTak
>>469です。
ID:TgFKsTt0さん、その発想はなかったです。>>479の方法ですと歯抜けフィールドは
nullとして変数に格納されるので特にいい感じです。
ID:9z2PCu2Jさんもありがとうございます。
ですがいずれの場合でも、遅延環境変数のためCSVのフィールド内に半角の!が
含まれていると詰みますね。含まれる可能性があるかないかは現時点で何とも言えないのですが。
しかしデリミターで抽出された対象がnullだと、後ろの対象を繰り上げて変数に格納する
というこのバッチの挙動が今一つ腑に落ちないのですが、どういった理由からこのような
仕様になったのでしょうか?
ちなみここのところの長期規制につき、代理レスを依頼してるためIDが一定しないと思います。
483:名無し~3.EXE
10/11/24 22:40:05 TgFKsTt0
>>482
そもそもデフォルトのデリミタである空白で一つ一つ区切られるような仕様だったら
えらく使用に困る代物だろ?
連続した区切り文字は一つの区切りとして考えるのは当然の流れ。
484:名無し~3.EXE
10/11/24 23:08:48 TgFKsTt0
遅延展開が使えないならこんなのでもいいんじゃないのかね。
@echo off
for /f "usebackq delims=" %%i in ("csv.txt") do (
call :sub %%i
)
goto :eof
:sub
set t=%*
set t="%t:,=","%"
for /f "usebackq tokens=1-6 delims=," %%a in (`call echo %%t%%`) do echo %%~a,%%~b,%%~c,%%~d,%%~e,%%~f
goto :eof
485:482
10/11/24 23:51:10 iNcoiXRQ
>>483-484
ktkr!!!
ありがとうございます、おかげさまで望みどおりの動作になりました。
そういえばこの遅延環境変数回避のテクニック、自分も以前使ったことがあるのに忘れてました;
連続した半角スペースが全部デリミタとして機能したら問題だというのは分かりますが
繰り上げると今回のCSVのように、何番目の要素かということが重要な意味を持つ場合に
問題になる気がします。つまるところバッチが使われるシーンではそういう例は稀なのでしょうか。
私は文字列操作の経験があまりないので、今後お話しいただいた内容を頭の片隅に
入れときながら注意していこうと思います、ありがとうございました。
486:名無し~3.EXE
10/11/26 03:25:44 3vgrgtW/
(`call echo %%t%%`) callは不要
487:名無し~3.EXE
10/11/28 15:33:50 XlH6ZNHD
テキストファイルの中身を探索して、正規表現に「合致した範囲だけ」を抽出する方法ってありますか?
findstr /r 文字列 パス
で正規表現探索は出来るのですが、出力されるのが行単位なので、さらに各行内の
正規表現にマッチした部分まで絞り込んで抽出したいのです。
488:名無し~3.EXE
10/11/28 23:41:54 kjMh0K6B
つwsh
489:名無し~3.EXE
10/12/13 22:48:34 KFG9s2Ni
【コラム】Windows XPスマートチューニング (14) 「reg.exe」の使い方を覚える その1 | パソコン | マイコミジャーナル
URLリンク(journal.mycom.co.jp)
【コラム】Windows XPスマートチューニング (14) 「reg.exe」の使い方を覚える その1 | パソコン | マイコミジャーナル
URLリンク(journal.mycom.co.jp)
環境変数を埋め込むバッチファイルを作成できるか - Windows XP - 教えて!goo
URLリンク(oshiete.goo.ne.jp)
システム環境変数が保存されない? - Windows XP - 教えて!goo
URLリンク(oshiete.goo.ne.jp)
PATHのリフレッシュ方法はにでしょうか? - Windows系OS - 教えて!goo
URLリンク(oshiete.goo.ne.jp)
教えて!goo[システム環境変数 レジストリ]についての検索結果 ( 約36件中 1~10件を表示 ) - 教えて!goo
URLリンク(oshiete.goo.ne.jp)
490:名無し~3.EXE
10/12/13 23:25:15 EVo3YvrE
どうでもいいが、教えて、は最早サーチスパムだよな
491:名無し~3.EXE
10/12/18 00:31:31 mG6dcAQg
echo パスを追加
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v path /t reg_sz /d "%path%;c:\bin\uty"
492:名無し~3.EXE
10/12/18 17:34:22 EcM8V9cL
setx path "%path%;c:\bin\uty" /m
493:名無し~3.EXE
10/12/22 08:46:53 HhLXioMQ
windows7 64bitではntcmds.chmはどこに行ったんでしょうか
494:名無し~3.EXE
10/12/22 13:52:27 LoRW5TNX
無くなった。
しょうがないから自分で作った
495:名無し~3.EXE
10/12/22 22:53:09 XaXxiced
URLリンク(technet.microsoft.com)
496:名無し~3.EXE
10/12/23 17:29:45 9ROm8nmO
質問です
type 初期化.txt |format G: /FS:FAT32 /V:DATA
(echo DATA&echo y)|format G: /FS:FAT32 /V:DATA
上は正常に終了するのに下は
ファイル システムの種類は FAT32 です。
ドライブ G: の現在のボリューム ラベルを入力してください ドライブに無効なボリュー
ム ラベルを入力しました。
となってうまくいきません。理由を教えてほしいです。
ただし、初期化.txtの中身は
DATA
y
の2行(改行付き)です。お願いします。
497:名無し~3.EXE
10/12/23 19:38:03 5eVdfHFt
cmd /c "echo DATA&echo y"|format G: /FS:FAT32 /V:DATA
498:496
10/12/23 20:37:42 9ROm8nmO
>>497
うまくいきました。cmd /c、勉強してみます。ありがとうございました。
聞いてみてよかったです。では。
499:名無し~3.EXE
10/12/23 22:12:25 RnH41D1X
初心者スレに書いたのですが、なにもレスが無かったので
こちらで質問させてください。
以下のようなschtasksでタスクを作り、その日の01:13だけにR:\test.batを実行させるタスクを作りました。
SCHTASKS /Create /SC ONCE /TN TESTJOB /TR R:\test.bat /ST 01:13
R:\test.batがその日の01:13に実行されたのですが、
タスクはスケジューラーでみると次回実行時刻が空白のまま残っています。
タスクの実行後自動的にこのタスクを削除する指定はどうやるのでしょうか?
タスクスケジューラーの設定をみると
「タスクの再実行がスケジュールされてない場合に削除されるまでの時間」という設定があって
この設定をどうやって、CLIで指定するかです。
OSはWindows7 Ultimate 64bit
500:名無し~3.EXE
10/12/23 22:41:56 5eVdfHFt
>>496-497
勉強するったって、勉強しても無理だと思うぞ
ヒント1
(echo DATA&echo y)|more>a.txt
a.txtをメモ帳で開いて、空白の有無をチェックしてみ
ヒント2
(echo DATA&echo y&echo %%cmdcmdline%%)|more>a.txt
なぜそうなるかこれで分る
501:名無し~3.EXE
10/12/23 22:46:12 5eVdfHFt
>>499
/?したら/zが目に付いたが?
502:名無し~3.EXE
10/12/23 22:52:20 RnH41D1X
>>501
C:\>SCHTASKS /Create /SC ONCE /TN TESTJOB /TR R:\test.bat /ST 23:13 /Z
エラー: タスク XML に必須の要素または属性が含まれていません。
(40,4):EndBoundary:
C:\>
/Kとかもやってみたしうまくいかない。
503:名無し~3.EXE
10/12/23 23:00:45 izmRYVGw
>>496
こういう方法もあるぞ
echo Y|format g: /fs:fat32
label g:DATA
504:496
10/12/24 00:26:20 Gp00iisX
>>500
追加情報ありがとうございます。
cmd /cを使わないとyだけがformatコマンドに送られるからだめなのと解釈したのですが、
まちがいでしたか?
ヒントは実行しましたが、すいません、理解できませんでした。難しいです。
>>503
レスありがとうございます。ですが、1行目でエラーが出てしまいます。
505:503
10/12/24 00:51:21 tS5P4SyW
>>496 = >>504
ごめん
1行目は、
echo y|format g: (/q) /fs:fat32 /v:
だった
2行目をなくすには
echo y|format g: (/q) /fs:fat32 /v:DATA
だね
(Win7のcmd.exeとUSBメモリーで確認した)
506:名無し~3.EXE
10/12/24 00:56:06 rJh8lKs2
空白を_で表すと
DATA_
y_
になってるだろ?だからエラーになる
2つ目実行したら
DATA
y
C:\Windows\system32\cmd.exe /S /D /c" ( echo DATA & echo y & echo %cmdcmdline% )"
つまり、パイプの前は(echo DATA&echo y)が( echo DATA & echo y )に編集されてサブシェルで実行されるってこと
507:名無し~3.EXE
10/12/24 02:53:19 rJh8lKs2
>>502
URLリンク(social.technet.microsoft.com)
508:名無し~3.EXE
10/12/24 02:57:38 rJh8lKs2
URLリンク(support.microsoft.com)
509:名無し~3.EXE
10/12/24 21:27:08 Gp00iisX
>>506
たびたびありがとうございます。理解しました!敗因はパイプとリダイレクトでは
挙動が違うことに気づかなかったことと、ヒントをコマンドプロンプトから実行した
ことです。結果、こうなってしまって、わけがわからなくなりました。
DATA_
y_
%"cmd.exe" /k "cd D:\TXT"%_
%cmdcmdline%をググるか、ヒントをバッチで実行すれば済んだのですが。
なさけないです。丁寧な説明、ありがとうございます。
>>505
確認までしていただいて恐縮です。情報提供不足でした。実はGドライブには元から
ボリュームラベルがついているのですよ。
その場合、Formatコマンドはラベルの再入力を求めるので、yだけではエラーになるのです。
蛇足ですが、コマンドラインはPerlスクリプト内で使用しています。モジュールを組み込む
より、qx(コマンドライン)のほうが楽ですので。筋が悪いですが(^^;)
アドバイス、ありがとうございます。
510:名無し~3.EXE
10/12/24 22:22:09 rJh8lKs2
%%があったらバッチ
511:496
10/12/24 22:52:47 Gp00iisX
>>510
覚えておきます。
512:名無し~3.EXE
10/12/26 12:45:43 ciLh5r7B
SCHTASKS /Create /SC ONCE /TN TESTJOB /TR R:\test.bat /ST 01:13
ユーザー名・パスワードとZ V1を付けたらうまくいった。
SCHTASKS /Create /SC ONCE /TN TESTJOB /TR R:\test.bat /ST 01:13 /RU mona /RP password /Z /V1
513:名無し~3.EXE
11/01/08 00:25:22 KRZHH0QO
ドメインユーザのセキュリティタブの項目を追加するコマンドってありますか?
514:名無し~3.EXE
11/01/08 06:09:28 uHaCk9v5
if not match "%~1" *.txt echo %~1 is not text
みたいな処理ってどう書けばいいの
515:名無し~3.EXE
11/01/08 09:36:00 UiJAiM7p
if not "%~x1" == ".txt" (echo %~1 is not text)
516:名無し~3.EXE
11/01/08 14:51:51 wFF3NM0U
if /I not "%~x1" == ".txt" echo %~1 is not text
517:名無し~3.EXE
11/01/08 15:27:21 MuSt9ita
ワイルドカードや正規表現の一致のチェックするコマンドってないんだよな。
一応検査対象の文字列をファイルに保存してfindstrすれば正規表現の方はできそうだけど。
518:名無し~3.EXE
11/01/08 15:56:23 wFF3NM0U
(echo %~1)|findstr ".txt$" && echo %~1 is not text
519:名無し~3.EXE
11/01/12 19:09:19 PoyWM9uQ
batファイルで
a.01
a.02
a.03
といったバイナリファイルをまとめてドロップすると
copy /b "a.01"+"a.02"+"a.03" "a"
という処理をさせたい(ファイル名はスペースを含んだりさまざまです)のですがどう書けばいいですか?
ドロップするファイル群の名前はみんな同じかとか、連番の拡張子かとかは人間側で判断しようと思っています
単純に入力部分にワイルドカードが使えるのかなと思ったのですが駄目でした
あとドロップで渡されたときのファイルの順番は必ずしもファイル名の昇順とは限らないんでしょうか
520:名無し~3.EXE
11/01/12 22:59:55 aRkUDzA8
これはおまえら(含む俺)が大好きなforと遅延展開を活用して作るのにちょうどいい難易度の課題だな。
ファイル名に空白文字入るかどうか、とか、結合する順番は単純に文字列ソート順でいいのかどうか、とか、
出力先のファイル名どう決めるか、とか、最大ファイル数あるいは最長パス長どうするか、とか、
仕様の細かい部分は考えるだけでカウパー出てきたぜ。
521:名無し~3.EXE
11/01/12 23:20:20 NzY94YN0
>>519
copy /b + %* %~dpn1
522:名無し~3.EXE
11/01/12 23:24:44 rNDzd7N5
最大ファイル数とか、どうするかってどうにもならないでしょ。
523:名無し~3.EXE
11/01/13 01:31:36 8DexkebC
ruby -e "`copy /b #{ARGV.sort.join(' + ')} eroero.avi`" %*
524:名無し~3.EXE
11/01/13 09:44:27 Cb6o+0JX
for /f "delims=" %%I in ('dir /b /o-n %*') do copy /b + "%%~I" ,, "%%~dpnI"
525:名無し~3.EXE
11/01/13 10:46:27 Cb6o+0JX
copy nul "%~dpn1"
for /f "delims=" %%I in ('dir /b /o-n %*') do copy /b "%%~dpnI" + "%%~I" "%%~dpnI"
526:名無し~3.EXE
11/01/17 20:32:44 cAtwP0h5
dsquery group -name groupというコマンドを実行して、
コマンド実行で返ってきた値が入っているか、
IFで判定したいんですがどうやったらできますか?
いろいろやってみたんですが、全然うまくいかない…
527:名無し~3.EXE
11/01/17 20:38:39 Vn6Pawll
for /f "delims=" %%I in ('dsquery group -name group') do echo %%I
528:名無し~3.EXE
11/01/17 21:26:49 cAtwP0h5
>527
いけました!ありがとうございます。
もう一点質問なんですが、inの中って変数展開できるんでしょうか?
for /f "delims=" %%I in (dsquery group -name %%temp) do echo %%I
みたいに記載すると、うまく展開されません。
529:名無し~3.EXE
11/01/19 13:10:47 wn7tagK/
%temp%
530:名無し~3.EXE
11/02/13 12:38:12 xOI1nq+5
LAN内のPCやプリンタ、ネットワーク機器のIPアドレスを
調べて一覧にするコマンドプロンプトのコマンドはありませんか?
固定IPかDHCPから割り振られたIPか、わかると更に嬉しいです。
531:名無し~3.EXE
11/02/13 13:24:32 qa6bFQMw
こういう人がいるからいつまでたってもNetBIOSがなくならない
532:名無し~3.EXE
11/03/03 05:16:29.94 DEBzw2H3
あるテキストファイル(hoge.txt)に、数行の文字列があり、その最後の行に「空白行(改行のみの行)」が含まれています。
この最後の空白行だけを、コマンドで削除したいんですが、どのようなコマンドになるでしょうか?
よろしければご教授願います・・・。
533:名無し~3.EXE
11/03/03 06:55:03.72 Ir7qnM+/
for /f "usebackq delims=:" %%i in (`findstr /r /n "." "hoge.txt"`) do @set n=%%i
(for /f "usebackq tokens=1,* delims=:" %%i in (`findstr /r /n ".*" "hoge.txt"`) do @(
if /i %n% GEQ %%i echo,%%j))>hogehoge.txt
534:名無し~3.EXE
11/03/03 17:03:37.23 yGt/TIu+
>>532
sort /+100000 hoge.txt|more +1|sort /+100000 /o hoge.txt
535:名無し~3.EXE
11/03/05 22:32:31.95 oJAp4RiF
すみません、お伺いしたいのですが、
とあるスクリプトを毎ログオン時に実行させたいのですが、
普段使ってるのは管理者権限のないアカウントで、
そのスクリプトはその管理者権限のないアカウントで
ログオンしたときにも、管理者権限で走らせたいんです。
また、そのPCを使用している人間に管理者パスワードを知られないようにしたいんです。
schtasks の onlogon で /ru を使うと、/ru で指定したユーザがログオンしたときにしか
スクリプトが走らないと思うんです。
(今、実験できる環境がありません。すいません。)
どのようにすればよろしいでしょうか?
まことに申し訳ありませんがご教授お願いします。
536:名無し~3.EXE
11/03/05 23:32:58.86 gtOstS9Q
無理です。
ログオン時じゃなくて起動時だったらスタートアップスクリプトで出来そうだけど。
537:名無し~3.EXE
11/03/05 23:39:20.92 Gd+QfTap
タスクスケジューラでできね?
538:名無し~3.EXE
11/03/06 12:41:29.63 +PnaHAZD
>>535
schtasksはログオンしてるユーザと同等かそれ以下の権限のアカウントでしか実行できない糞仕様
539:名無し~3.EXE
11/03/06 12:50:55.62 +PnaHAZD
>>535
ついでに
レジストリのHKMLのスタートアップ
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
ここに新しい項目作ってスクリプトを実行するよう登録してみ
HKMLなのにログオンしないと走らない糞仕様だから>>535の目的には使えるかもよ
ただAdministrator権限じゃなくてSYSTEM権限で実行されるんでそこんとこ留意
540:名無し~3.EXE
11/03/06 21:09:03.09 +5J+PRQW
にーさん、にーさん、
HKLM -> HKLM
慌てすぎ。
541:名無し~3.EXE
11/03/06 21:11:52.87 fQfubHhk
>>540
542:名無し~3.EXE
11/03/06 21:25:35.97 vb/ezcOK
>>540
543:名無し~3.EXE
11/03/06 21:37:47.26 +5J+PRQW
慌て者はボクだったよ、
さよなら……
544:名無し~3.EXE
11/03/06 23:42:16.74 JPIvqzw6
>>543
指摘ありがと
吊ってくる
545:535
11/03/07 00:55:58.18 QCcxjvdA
皆様、にありがとうございます。
>>539さんに教えていただいた方法を試してみたいと思います。
546:535
11/03/07 01:01:48.26 QCcxjvdA
途中で書き込むボタン押してしまいました・・・・crz
改めて、皆様本当に、いろいろ考えていただき、
ありがとうございました。
それでは、失礼いたします。
547:名無し~3.EXE
11/04/24 00:53:46.83 ghmTn2ef
拡張子を.batにしたいのですが
a.txtを作って
a.batに名前を変更
a.bat.txtとなって拡張子はそのまま
となってしまいます
めちゃくちゃ初歩的な質問ですみません
誰か教えてください
548:名無し~3.EXE
11/04/24 01:01:17.41 e1cTj/Z7
>>547
「登録されている拡張子は表示しない」
でググれ
549:名無し~3.EXE
11/04/24 01:04:13.70 ae46KHG2
ren a.bat.txt a.bat
550:名無し~3.EXE
11/04/24 01:07:33.93 ghmTn2ef
>>548
助かった
551:名無し~3.EXE
11/05/10 22:54:24.51 22nx6PrC
バッチファイル中の文字置換について質問です。
与えられた引数を元にした名前のフォルダを作成するバッチファイルを
作成したのですが、フォルダの名前に使用できない文字(\/:*?"<>|)が
含まれる場合があるので、その部分は適時全角の近似文字に
置換してからフォルダを作成しています。
以下の方法で \/:?"<>| については対処できたのですが、残りの
* (半角アスタリスク)だけはどうしても*(全角アスタリスク)に
置換できません。他と同じように記述すると、構文エラーになってしまいます。
* を * に置換する方法はありませんか?よろしくお願いします。
C:\>sample.bat "dir\/:?<>|"test"
==================================================
@echo off
setlocal
set dir_name=%1
set dir_name=%dir_name:\=¥%
set dir_name=%dir_name:/=/%
set dir_name=%dir_name::=:%
set dir_name=%dir_name:?=?%
set dir_name=%dir_name:<=<%
set dir_name=%dir_name:>=>%
set dir_name=%dir_name:|=|%
set dir_name=%dir_name:"=”%
set dir_name=%dir_name:~1,-1%
mkdir "C:\%dir_name%"
==================================================
C:\>dir
2011/05/10 22:45 <DIR> dir¥/:?<>|”test
552:名無し~3.EXE
11/05/10 23:47:34.27 BGdDMW0l
あまりにも表示される情報が多いので、最初の方の情報が消えてしまいます。
最初の10行程度でいいので見る方法はないでしょうか?
553:名無し~3.EXE
11/05/11 02:15:03.54 cijUUQbA
>>551
set "dir_name=%dir_name:*=*%"
でもだめ?ためしてないけど
>>552
more
554:名無し~3.EXE
11/05/11 05:54:41.46 cRdfPQu8
@echo off
set dir_name=a**b*c***e
set index=0
set out=
:loop
call set t=%%dir_name:~%index%,1%%
if "%t%"=="" goto :end
if "%t%"=="*" (
set out=%out%*
) else (
set out=%out%%t%
)
set /a index+=1
goto :loop
:end
echo %out%
555:名無し~3.EXE
11/05/11 14:18:14.26 e30TubL/
555
556:551
11/05/11 23:32:32.40 7phbG/we
>>553
ダメみたいです
>>554
多分set系の質問で毎度お世話になっている方だと思いますが、ありがとうございます。
いつも高度な組み方で舌を巻いているのですが、今回のcall部分の動作がわかりません。
callが対象にとれるのは他のバッチファイルか、もしくは同じファイル内のサブルーチン(ラベル)
だと思っていたのですが、今回はそのいずれでも無いように見えます。
一体どういった原理でしょうか?
557:名無し~3.EXE
11/05/12 01:14:34.68 5cpccTMq
>>556
多分人違いだし、回答してる奴は結構人数いると思うし
それにそんなに高度な代物じゃないのだが…
変数展開が2段階でなされるのでenabledelayedexpansionを
使わなくても遅延展開が可能になるところがいいのだけど
原理とか聞かれると弱いw
経験的に使っててソースとか出せんわ。
URLリンク(otnx.jp)
この辺とか見りゃ一応は書いてあるけど、公式のヘルプとかその手の奴ってあるのかわからん。
558:名無し~3.EXE
11/05/12 14:44:56.86 iMJdLd8m
>>552
moreでもいいけど、プロパティで画面バッファを1000~2000行にしとけば逆スクロールで見られる
559:551
11/05/12 18:36:53.53 IzWOSOP9
>>557
callにこんな使い方があったなんて、目から鱗です。
こんな使い方ができるなら、if文の中で()を
含むsetコマンドを使うと構文エラーになる
恐れがあるのでいちいち外部サブルーチンに
callで飛ばしてからsetしてましたが、これでだいぶ
スマートに記述できます。ありがとうございます!
と思ったら、&(半角アンド)も引数で渡される
可能性があることを失念してました orz
&は""つきなら変数に格納できるんですが
前述の通り、フォルダ名に使用するのでこの方法も使えません。
再度質問で申し訳ないのですが、何かうまい方法はありませんか?
560:名無し~3.EXE
11/05/12 19:26:30.09 LErTZijl
無限に広がるbat以外の選択肢
561:名無し~3.EXE
11/05/13 01:08:39.71 kUCy/KG/
badな選択肢やね
562:名無し~3.EXE
11/05/13 04:45:23.20 oKY0NEqs
うわぁ・・・・・・>>561
563:名無し~3.EXE
11/05/13 07:57:58.99 JjcdbuQQ
PowerShell に9割方移行した俺に死角はなかった
564:名無し~3.EXE
11/05/13 08:14:54.01 dxRHMzGd
×死角
○資格
このスレ的にはw
565:名無し~3.EXE
11/05/13 20:51:26.00 NAZVaB87
俺は人間が丸いから四角はないなw
566:名無し~3.EXE
11/05/13 22:22:36.34 KrF4BoQE
ウニみたなトゲトゲで遠くから見たら丸く見えるだけじゃないの
567:551
11/05/14 08:11:56.82 vQ4YR2pY
やっぱりバッチでやるのは無理ですかね。まさかこんなことのせいでで手詰まりになるとは・・
今から新しく別のスクリプトやるならPowerShellもPerlもJavaScriptでも手間は変わらないけど、どれがいいんだろう。
568:名無し~3.EXE
11/05/14 14:20:39.32 HQ7w1xFo
バッチでは無理だと思う。
そもそもバッチファイルに&以降のパラメタは受け渡されてこないので。
(コマンドシェルの構文解析で&以前のコマンドと&以降のコマンドの2つに分離されてしまう
ということは、&以前のコマンドであるバッチスクリプトからはどうあがいても
&以降のコマンドを知るすべは無いと思われる)
入力方法を変えればいけるけど。(set /pかファイルから入力するとかすれば回避できる)
JavaScriptがWebページにも応用できて良いんじゃないか?
ただしWSH(cmd.exeから呼び出す)で使うんなら上記と同じことになるんで別のシェルを用意しないと。
まあ、俺は良くは知らないがどのシェル(Perlでも)でも入力に制限がつくんじゃないかな?
569:名無し~3.EXE
11/05/14 14:33:27.36 pQZ75ggQ
>&は""つきなら変数に格納できるんですが
>前述の通り、フォルダ名に使用するのでこの方法も使えません。
って話が良く分からないけど、""付けて引数を渡して、フォルダ名は""外して作ればいいんじゃなくて?
570:名無し~3.EXE
11/05/14 15:39:48.37 HQ7w1xFo
あれ? ""で囲って入力するんなら何がダメなんだろう?
もしかして>>551と>>554を組み合わせられないの?
それとも&は小文字にしたいの?
@echo off
set dir_name="%~1"
set dir_name=%dir_name:&=&%
call :2nd_step %dir_name%
set out="%out:&=&%"
echo %out%
mkdir c:\%out%
goto :eof
:2nd_step
set dir_name=%~1
set index=0
set out=
:loop
call set t=%%dir_name:~%index%,1%%
if "%t%"=="" goto :end
if "%t%"=="*" (
set out=%out%*
) else (
set out=%out%%t%
)
set /a index+=1
goto :loop
:end
571:名無し~3.EXE
11/05/14 21:23:39.65 iN5VGoJk
&は!の遅延展開つかわんとだめじゃないの?
572:名無し~3.EXE
11/05/15 22:44:32.57 FQFzH4nC
直前に実行したコマンドの結果ってどっかの変数に入ってないですか?
ipconfig /all | find "Default Gateway" | find "192.168.11.1"
が成功してたら処理続行、成功してなかったら(何も返ってこなかったら)exit
みたいなバッチを書きたいんですが。
573:名無し~3.EXE
11/05/15 22:50:21.60 CD6nL7GM
&&
||
574:名無し~3.EXE
11/05/15 22:52:33.37 BUUtILe0
echo %errorlevel%
575:572
11/05/15 22:56:59.06 FQFzH4nC
あ、自己解決て書こうとしたら解答いただけてましたw
errorlevelで見れました。
ありがとうございました。
576:551
11/05/17 21:46:05.73 cdAPGdzL
>>551=559です。時間をあけてしまってスイマセン。
パスを""で括るとき、必ずしも一番前と後ろで括る必要が無いことを初めて知りました。
C:\>mkdir foo" "bar
C:\>dir
2011/05/17 21:25 <DIR> foo bar
これを使えばできるだろうと思いましたが、どうにもうまくいきません orz
フォルダ名に使えない(\/:*?"<>|)以外は、極力引数で渡された文字を
そのまま引き継ぎたいです。
なので半角&も、全角&に変換せずにそのままフォルダ名に使おうと考えています。
様々な文字が渡される可能性があるので、他にも半角スペースや()なんかも注意が必要だと思います。
目的を再度まとめると以下のような感じでしょうか。
[目的]
・sample.bat "文字列" の形で引数が渡されるので、その文字列を使ったフォルダを自動作成するバッチファイル
・フォルダ名に使えない(\/:*?"<>|)については、それぞれ近似の全角記号に置き換える
・上記のダメ文字以外は、極力元の文字や記号をフォルダ名に反映させる(半角&記号など)
一応自力で試行錯誤してみて、以下のようなバッチファイル作ってみたのですが
望み通りの動作になりません。特に"と、&や半角スペースが同時に使われている
場合などの処理が難しいです。バッチでうまいことやる方法は無いでしょうか?
577:551(分割 1/2)
11/05/17 21:53:30.09 cdAPGdzL
※注意※
正しく動作しません、あくまで参考です
C:\>C:\sample.bat "h ge|<a>bc"
==================================================
@echo off
call set char_nam="%~1"
echo 入力:%char_nam%
set char_nam=%char_nam:\=¥%
set char_nam=%char_nam:/=/%
set char_nam=%char_nam::=:%
set char_nam=%char_nam:?=?%
set char_nam=%char_nam:<=<%
set char_nam=%char_nam:>=>%
set char_nam=%char_nam:|=|%
set char_nam="%char_nam:"=”%"
set char_nam="%char_nam:~2,-2%"
set index=0
set out=
578:551(分割 2/2)
11/05/17 21:54:48.47 cdAPGdzL
:loop
call set t="%%char_nam:~%index%,1%%"
call set t=%%t:"=""%%
call set t=%%t:~1,-1%%
if %t%=="""" (
set out=%out%
)
if %t%=="" (
goto :end
) else if %t%=="*" (
set out=%out%*
) else if %t%=="&" (
set out=%out%"&"
) else if %t%==" " (
set out=%out%" "
) else (
set out=%out%%t:~1,-1%
)
echo out:%out%
set /a index+=1
goto :loop
:end
set out=%out:~2,-2%
set dir_nam=C:\%out%
echo ディレクトリ名:%dir_nam%
mkdir %dir_nam%
==================================================
579:551
11/05/17 21:56:11.22 cdAPGdzL
C:\>dir
2011/05/17 21:50 <DIR> h ge|<a>bc
C:\>C:\sample.bat "h ge&<a>bc"
( の使い方が誤っています。
思ったより長くなってしまいました。
お目汚しすいません。
580:名無し~3.EXE
11/05/18 00:13:34.09 OxvdWdxe
>>579
>>570ではどこがダメだったの?
@echo off
set dir_name="%~1"
if %dir_name%=="" echo パラメタを指定してください&goto :eof
set dir_name=%dir_name:\=¥%
set dir_name=%dir_name:/=/%
set dir_name=%dir_name::=:%
set dir_name=%dir_name:?=?%
set dir_name=%dir_name:<=<%
set dir_name=%dir_name:>=>%
set dir_name=%dir_name:|=|%
set dir_name=%dir_name:&=&のバ カ%
call :2nd_step %dir_name%
set out=%out:"=”%
set out="%out:&のバ カ=&%"
echo %out%
mkdir c:\%out%
goto :eof
:2nd_step
set dir_name=%~1
set index=0
set out=
:loop
call set t=%%dir_name:~%index%,1%%
if "%t%"=="" exit /b
if "%t%"=="*" (set out=%out%*) else (set out=%out%%t%)
set /a index+=1
goto :loop
581:名無し~3.EXE
11/05/18 03:02:56.72 OxvdWdxe
そうか"が途中に入ってるとダメなのか。
さらにいろいろな場合にまずいな。
順番をちょっと変えて最初の方にもっていけば入力できた場合は多分大丈夫だろう
case1: 入力できない場合は対処不可
"h ge&"<a" NG
case 2: パラメタ無しの判定もまずかった。
"a"b" NG
case 3: あと、^<(^>)の入力時もまずい。
"a^<b" NG
次にcase1はどうしようもないが、case 2,3の修正版をあげておく
582:名無し~3.EXE
11/05/18 03:03:58.42 OxvdWdxe
@echo off
set dir_name=%1
if not defined dir_name echo パラメタを指定してください&goto :eof
set dir_name=%dir_name:&=&のバ カ%
set dir_name="%dir_name:"=”%"
set dir_name="%dir_name:~1,-1%"
set dir_name=%dir_name:\=¥%
set dir_name=%dir_name:/=/%
set dir_name=%dir_name::=:%
set dir_name=%dir_name:?=?%
set dir_name=%dir_name:<=<%
set dir_name=%dir_name:>=>%
set dir_name=%dir_name:|=|%
set dir_name=%dir_name:^=^のバ カ%
call :2nd_step %dir_name%
set out="%out:&のバ カ=&%"
set out=%out:^のバ カ=^%
echo %out%
mkdir c:\%out%
goto :eof
:2nd_step
set dir_name=%~1
set index=0
set out=
:loop
call set t=%%dir_name:~%index%,1%%
if "%t%"=="" exit /b
if "%t%"=="*" (set out=%out%*) else (set out=%out%%t%)
set /a index+=1
goto :loop
583:名無し~3.EXE
11/05/18 03:13:38.96 OxvdWdxe
set dir_name="%dir_name:~1,-1%"
これ無意味だった。
さらに全角の”が両端に付くがまずけりゃcall 2nd_stepから帰ってきたあと
&と^を半角に戻す前に判定して取っちゃえ。
ちなみに&と^を一旦別文字列に置き換えてるが、これはおよそ入力しそうにない文字列に
しとけば実用上問題ないだろう。
584:名無し~3.EXE
11/05/18 22:55:01.05 +ThlMx5f
set dir_name=%dir_name:<=<%
set dir_name=%dir_name:>=>%
set dir_name=%dir_name:|=|%
set dir_name=%dir_name:&=&%
はset "...=..."でエスケープせんとあかんのじゃなかろか
set "dir_name=%dir_name:<=<%"
585:551
11/05/19 00:34:36.79 ph4ezJMK
>>580-583
ありがとうございます。おかげさまで一応の目途が立ちました。
流石にあらゆるケースに、バッチだけで対応するのは難しいですね。
まぁ " 自体の発生頻度は少ない見込みですし、その他 & や | 記号と
同時に発生する確率はほとんどないハズなので、実用上は問題ないと思います。
それでもダメだった場合は、潔くあきらめて半角&は全角&に置換するようにします。ちなみに
set dir_name="%dir_name:~1,-1%"
の部分を、思いつきで
set dir_name="%dir_name:~2,-2%"
に変更したらなぜかうまく両端の全角”が外せました(動作も問題ないように見えます)。
原理は分かりません。
>>584
精査してないですが、試してみたところうちでは正しく動作しなくなりました。
586:名無し~3.EXE
11/05/19 00:59:05.21 ydoAvGEN
必ず全体を""付きで貰うと条件を固定した場合はそれでもいい。
set dir_name="%dir_name:~1,-1%"
これは無意味なステートメントだが、この時点では、dir_name="”~”"の状態となってるので。
わざと両端の""を全角で残したのにはパラメタが""付きでない場合や"のみの場合も考慮したから。
例
abc"&< "def
""
"
など。
なので全角の”をとるのなら>>583でアドバイスしたタイミング(callの直前でもいい)を薦める。
また無条件に取るんじゃなく全角の”であることをチェックしてから取るように。
さらに最初に""や"の場合、パラメタなしと判定することも必要になってくる。
587:名無し~3.EXE
11/05/19 01:08:58.94 ydoAvGEN
あと&を全角にしようとも、そもそもバッチスクリプトにきちんと入力されてこない場合は対処は無理。
例
"abc"&def"
"abc"<def"
588:名無し~3.EXE
11/05/19 17:32:27.52 ydoAvGEN
@echo off
set /p chars=新規フォルダ名を指定してください :
rem set /p chars=<"parm.txt"
if not defined chars echo 何か指定してください&goto :eof
set chars="%chars:"=”%"
if %chars%=="”" echo 何か指定してください&goto :eof
if %chars%=="””" echo 何か指定してください&goto :eof
if "%chars:~1,1%"=="”" set chars="%chars:~2%
if "%chars:~-2,1%"=="”" set chars=%chars:~0,-2%"
set chk_spc_only=%chars: =%
if %chk_spc_only%=="" echo 何か指定してください&goto :eof
set chars=%chars:\=¥%
set chars=%chars:/=/%
set chars=%chars::=:%
set chars=%chars:?=?%
set chars=%chars:<=<%
set chars=%chars:>=>%
set chars=%chars:|=|%
set chars=+%chars%
set out=
:loop
set chars="%chars:~2%
if %chars%=="" set out="%out:"=%"& goto next
if "%chars:~1,1%"=="&" set out=%out%"&"& goto loop
if "%chars:~1,1%"=="^" set out=%out%"^"& goto loop
if "%chars:~1,1%"=="(" set out=%out%"("& goto loop
if "%chars:~1,1%"==")" set out=%out%")"& goto loop
if "%chars:~1,1%"=="*" (set out=%out%*) else (set out=%out%%chars:~1,1%)
goto :loop
:next
echo %out%
mkdir c:\%out%
589:名無し~3.EXE
11/05/19 17:37:49.55 ydoAvGEN
↑
パラメタの受け渡し方を変えると、かなり入力できるようになった。
""で括ってなくても、多分どのような文字列も大丈夫。
例
a&b^|c)>d" <e
など
590:名無し~3.EXE
11/05/19 20:04:59.96 awzZy/s4
WSH使えば簡単だろ?
591:名無し~3.EXE
11/05/19 20:25:40.58 oE2o78vn
PSのほうが簡単だろ?
592:名無し~3.EXE
11/05/19 23:21:43.83 AHUx1fjJ
略すな。
PS って言うと PostScript のことかと思っただろ!!
593:名無し~3.EXE
11/05/20 07:31:35.62 6QTPIQ/I
(アカウントを)つかいきろう
PSN
594:名無し~3.EXE
11/05/21 04:02:40.61 ldRm9oSy
>>590に言われたので試しにWSHで書いてみた。
結果から言うと確かに簡単だったが1から勉強した身には結構大変だった。(何時間も掛かった)
検索してみても、いろんなバージョンのJavaScriptがあって、WSHでなくHTAだったりして頭が混乱したよ。
以下実行結果(StdInを使ったのでcscriptじゃないと動作しない。wscriptはダメ)
Z:\>cscript //nologo sample.js <list.txt
sample: ヌル、又は空白.(ピリオド)のみは指定できません
sample: "com0"は予約文字列です
OK. "z:\h ge&<a>bc"
OK. "z:\a < ”bcd” *:&(¥)"
OK. "z:\abc"
sample: "z:\abc" 既に同名のファイルが存在しています。
Z:\>echo abc| cscript //nologo sample.js
sample: "z:\abc" 既に同名のファイルが存在しています。
Z:\>
--list.txtの内容--
..
com0 .txt. ..
h ge&<a>bc
a < "bcd" *:&(\)
"abc"
abc . . .
---------------
595:名無し~3.EXE
11/05/21 04:03:26.22 ldRm9oSy
var drivename = "z:\\";
var stdin=WScript.StdIn, arg = WScript.arguments;
var fs = new ActiveXObject("Scripting.FileSystemObject");
var rc=0;
while(!stdin.AtEndOfStream) {
try{
var out = stdin.ReadLine().replace(/^"|"$/g,"");
var out = drivename + chk_fname(out.replace(/[.\s]+$/g, "")) //後方空白削除(前後空白削除の場合は/^\s+|[.\s]+$/g)
fs.CreateFolder(out); // 自前でfs.FolderExists(out)で存在チェックしても良い
WScript.Echo('OK. "'+out+'"');
} catch(e) {
rc=999;
WScript.StdErr.Write(WScript.ScriptName.replace(/\.[^.]*$/,"") + ": ");
switch(e) {
case "E_spc_only" : WScript.StdErr.Write('ヌル、又は空白.(ピリオド)のみは指定できません\n');break;
case "E_reserved" : WScript.StdErr.Write('"' + out.replace(/\s*\..*$/,"") + '"は予約文字列です\n');break;
default : WScript.StdErr.Write('"' + out + '" ' + e.description + '\n');
}
}
}
WScript.Quit(rc);
function chk_fname(s) {
var invalid_chars = {'<':'<','>':'>','*':'*', '"':'”', '?':'?', '\\':'¥', '/':'/', '|':'|', ':':':' };
var reserved_strs = new Array( "CON", "AUX", "NUL", "PRN", "COM[0-4]", "LPT[0-3]" );
if (s.replace(/[. ]/g, "")=="") throw "E_spc_only";
for (var i in reserved_strs) {
if (s.replace(/\s*\..*$/,"").replace(new RegExp(reserved_strs[i],"i"),"")=="") throw "E_reserved";
}
return s.replace(/[|:/<>*"?\\]/g, function (w){return invalid_chars[w];});
}
596:551
11/05/31 00:09:15.39 mdi5oQEJ
>>586-589
またもお返事遅くなすいません、どうもありがとうございます。
当該機能の部分を本チャンのバッチにマージして、一週間ほど
経過を見てみたのですが、どうにかまともに機能するようになったようです。
追加で示していただいたset /pを使う方法も、ファイルを経由する
やり方であれば選択肢として有り得たのですが、できれば引数で渡したかったので
結果として元の方法に、両端””を対処する処理を加える形で落ち着きました。
>>587に挙げていただいたようなトラブルは現実的には発生しないと考えています。
それよりも、""の扱い方が変わった(両端だけの使い方でなくなった)ので
そのために全部手動で修正した作業が大変でした。
今時PowerShellが動かないOSに新機能を追加するケースはそう無さそうですし
DOSブート環境で使える処理を組みたいとかでない限り、バッチファイルを
掘り下げて習得していく意義は薄いのかもしれませんね。
それでも私なんかは、過去の資産に縛られて泥沼に嵌っていってますが・・・
それと、お教えいただいたサンプルコードは他の場所に転載したり
アーカイブさせていただいてもよろしいでしょうか?
597:名無し~3.EXE
11/05/31 00:41:01.35 wKPKEtoy
>>596
スクリプトコードは何処へなりとも自由に持っていってもらって結構ですよ。
ちなみにBATでの最終形>>588は両端の"も取るし受け渡されたどの文字列も大丈夫だと思う。
set /pをパラメタ渡しに変えるだけで良いだろう。(>>587の制限はできるが)
ちなみに、set /pだとパイプでパラメタ受け渡しができる。(>>595と同様にフィルタ動作をする)
例 echo "abc"|sample.bat や type data.txt|sample.bat
なお>>595はWSHの習作なんで行儀の悪いことになっていた。まあ使わないとは思うが一応注意を。
(使ったオブジェクトを開放し忘れてる)
なお、DOSでのBATは似て非なるものでここで使ったようなテクニックはほぼ全て使えないんだなあ。
598:551
11/06/01 00:00:36.95 AfdclPhS
>>597
重ね重ねありがとうございます。
パイプで渡す場合でも、引数と同じように>>587の制限が
生じてしまうとのことで、かえって割り切れました。
DOSへの応用範囲も狭いとなると、後はもう殆ど意地ですねw
コードは今すぐどこかに転載するといった算段ではありませんが
今後も活用させていただきます。ありがとうございました。
599:名無し~3.EXE
11/06/05 15:50:03.34 yhEiQsQi
上記の現在のディレクトリで CMD.EXE を開始しました。UNC はサポートされません。
UNCパスってなに? うんこ?
600:名無し~3.EXE
11/06/05 16:10:22.82 rXbO9qcf
ネットワークドライブにマウントしてから使っとけ
分かったかウンコ
601:名無し~3.EXE
11/06/05 16:50:25.39 yhEiQsQi
ありがとうんこ
602:名無し~3.EXE
11/06/05 18:39:50.14 Zerct+oF
おすすめはpushd
603:名無し~3.EXE
11/06/06 01:16:02.61 TdZrxGMI
pushdしまくったら爆発した
604:名無し~3.EXE
11/06/06 01:52:29.27 CZbmeqot
pushd と prompt $P$+$G 併用お勧め
605:名無し~3.EXE
11/06/08 23:22:22.38 yE/jf+js
文字コードにUTF-8が使われているテキストがあるとまともに動かないツールばかりだ
606:名無し~3.EXE
11/06/08 23:27:30.85 fZwxK7EP
>>605
君のIDに出てるようにシフトJIS使え
607:名無し~3.EXE
11/06/10 17:15:48.46 Wxy05tDn
>>605
君のIDに出てるようにJScript使え
608:名無し~3.EXE
11/07/13 13:07:00.93 0zcACgIP
数百KB~数MBのファイルが何十GBと大量にあり、
なんとかこれを高速にコピーする方法は無いかと探しています。
今はxcopyを使っていますが、もっと良い方法は無いでしょうか?
609:名無し~3.EXE
11/07/13 13:15:44.72 Gf0fORp2
robocopy
610:名無し~3.EXE
11/07/13 13:54:36.75 CjocHXVI
>>608
URLリンク(www.google.co.jp)
611:名無し~3.EXE
11/07/14 01:26:08.50 MBHQqw7l
xcopyとかrobocopyの/Zスイッチの「再起動可能モード」ってなんなの?
↓見ると「再起動可能モード」の他に「バックアップモード」があるというのは分かったけど。
URLリンク(support.microsoft.com)
「バックアップモード」のほうはユーザー権利の「ファイルとディレクトリのバックアップ」や
「ファイルとディレクトリの復元」が有効になるってのはなんとなく分かったけど、
「再起動可能モード」のほうは、ネットワーク経由のコピーのときに有効なモードのようだけど
具体的には何なんだか全然よく分かんない。。。
612:名無し~3.EXE
11/08/11 20:17:50.94 z/fkZ+S/
このスレのえ〇いひとにお願いしたいんだけど
このバッチがどういう仕組みで動作してるのかアホにもわかるように解説してもらえんですか
URLリンク(scripting.cocolog-nifty.com)
とりあえずパイプによる標準入出力について今さらググってみて
「バッチへのリダイレクションによるデータ入力は、バッチ内で最初に標準入力を使用するコマンドへの入力となる」
(URLリンク(www.ne.jp))
てことを初めて知って、どうやら9行目のmoreで受け取ってるっぽいなとなんとなく想像してるんだけど
それ以外全然理解できないボスケテー
613:名無し~3.EXE
11/08/13 05:26:29.86 Dj1yFRZf
えぐいひと?
614:612
11/08/13 21:09:09.70 CYdSlQAp
〇は特定の文字ではなく任意の1文字にマッチする(略
などと意味不明なことを言いつつごちゃごちゃやってるうちになんか見えてきたような気がする
書き込みアクセスしてるファイルに対して別プロセスで書き込もうとするとエラーになるけど
読み込みはできるって仕様になってるのを利用してるってことなのかな
しかしこの8・9行目の処理って初心者的に目から鱗すぎる
615:名無し~3.EXE
11/08/13 22:01:36.02 Dj1yFRZf
無理筋だな やめとけ
616:名無し~3.EXE
11/08/14 16:24:20.80 ihVTTdCj
バッチが遅いので調べたところ、コマンド全般が遅いことがわかりました。
C:\temp>prompt $t$s$p$g
13:37:57.40 C:\>for /l %A in (1,1,10)do find 2> nil
13:38:00.67 C:\>find 2>nil
13:38:01.01 C:\>find 2>nil
<略>
13:38:03.71 C:\>find 2>nil
13:38:04.04 C:\>
エラーになるだけのfindコマンドの実行1回あたり0.34秒ほどかかります。dirやdate /tなどは早いのですが
findやfcなどの外部コマンドが遅いようです。
マシンはLenovo X200sでXP SP3です。低スペックのR51eでは10倍ほど早いので、遅くなる要因があるものと思います
テスト時CPUの負荷などは最低限です。antivirusやfirewallを切ると1秒ほど改善しますが、大きな要因が他にあると思います。
原因を調べる方法はありますでしょうか?みなさんのPCではパフォーマンスはいかほどでしょうか?
617:名無し~3.EXE
11/08/14 17:07:33.34 a3JFdokN
PATHのsystem32より前にネットワークが入ってんじゃね
618:名無し~3.EXE
11/08/14 17:27:56.09 TBaxWSr7
>>617
パスにネットワークドライブはありませんし、フルパス指定でも同様でした。
619:名無し~3.EXE
11/08/15 13:29:15.66 IHWQfMAm
>>618
ゴミ見たいの残ってるとか?
net useでネットワーク共有確認した?
620:名無し~3.EXE
11/08/16 00:03:15.86 BPczii+w
一度、実行前に
set path=%systemroot%
を実行してから試してみて欲しい。
621:名無し~3.EXE
11/08/20 14:42:15.09 bFmEIStu
半角"%"を含んでいるファイル名の処理方法をお聞かせ下さい。
具体的には、”AABBCC100%.txt”と言うファイルをmoveやren
しようとしても上手く行きません。””でパス&ファイル名をくくっても同様です。
例:D:\test\aabbccdd 100%.txt を F:\DATA\08\へ移動したい
┌───────────────┐
│D:\test > move /Y "D:\test\aabbccdd 100%.txt" "F:\\DATA\08\"
│
│
│D:\test > move /Y "D:\test\abcde 100\DATA\08\"
│指定されたパスが見つかりません。
│
%の箇所で可笑しくなっています。%付きのファイルが沢山有って
手作業で%(全角)に変更するのも現実的ではありませんし、
リネームソフトで変更より、まずは一旦コマンドプロンプトで解決できる
方法をお教え下さいませ。
622:名無し~3.EXE
11/08/20 15:02:30.60 eMW2GM3K
>>621
「指定されたパスが見つかりません」がtarget側にかかっているように見えるのは気のせい?
>move /Y "D:\test\aabbccdd 100%.txt" "F:\\DATA\08\"
move /y "D:\test\aabbccdd 100%.txt" F:\DATA\08\ でもダメですか?
#手元の環境では二重引用符で括るだけで問題なく動作します。
623:名無し~3.EXE
11/08/20 15:04:39.48 SjWiWNqx
直接入力なら問題なかったような気がするけど・・・
バッチ内なら%%
624:名無し~3.EXE
11/08/20 15:32:36.74 bFmEIStu
>>622-623
有り難うございました。100%%で解決いたしました。
正規表現のメタキャラみたいな扱いなのでしょうか?
ほかの文字もあるのか、もう少し勉強し直してきます。
助かりました。
625:622
11/08/20 15:38:08.00 ZtdU7YRi
>>624
あぁ、バッチでの記述だったんだね(>>621では言及されてなかったけど)。
バッチだと%は変数のために予約されているんで、リテラルの%は%%で記述。
626:名無し~3.EXE
11/08/26 09:59:56.85 07hasJ0+
保守
※落ちたように見えるスレは、ブラウザなどで1回書き込めば
スレリストに復活、専ブラ等でも書き込み可能に。
627:名無し~3.EXE
11/09/19 20:44:45.01 2pOzoyXR
batファイルにドロップした分を連続で処理できるようになっています。
これをフォルダ内のファイルを一括で処理するように改造する方法を教えてください
@echo off
SETLOCAL
SET SPath="D:\ICEECC\ICEECC.exe"
SET SParam1=c
SET SParam2=/b1024
SET SParam3=/r2
SET SParam4=D:\ECC
:start
IF "%~1"=="" GOTO syoriend
:syori
%SPath% %SParam1% %SParam2% %SParam3% "%SParam4%\[ECC] %~n1%~x1.ecc" "%~n1%~x1"
:next
SHIFT
GOTO start
:syoriend
rem ↓pause不要なら削除
pause
ENDLOCAL
628:名無し~3.EXE
11/09/19 21:54:35.30 RwWOOKax
ドロップ
for /f %%I in (%*) do %SPath% %SParam1% %SParam2% %SParam3% "%SParam4%\[ECC] %%~nxI.ecc" "%%~nxI"
フォルダ
for /f %%I in (*.*) do %SPath% %SParam1% %SParam2% %SParam3% "%SParam4%\[ECC] %%~nxI.ecc" "%%~nxI"
629:名無し~3.EXE
11/09/19 21:55:38.52 RwWOOKax
すまん/fいらん
630:名無し~3.EXE
11/09/20 18:04:21.52 JCBuRgx6
>>628
ばっちり動きました。
すごい。
631:名無し~3.EXE
11/09/22 15:08:44.24 OBFRVs3h
schtasksのstで秒単位で指定しても無視されてしまいますが、こんなもの?
632:名無し~3.EXE
11/09/22 15:34:21.37 dDDr9Qq2
>>631
そんなもの。GUIのタスクスケジューラでも時分までしか設定できないんだから仕方ないだろ。
633:名無し~3.EXE
11/09/22 18:43:08.33 u20l0LSl
必要なら中で待てばよい
634:名無し~3.EXE
11/09/23 15:45:10.63 SWICmH79
schtasksで表示すると秒まで出るが、虫されるとは、指定の仕方が悪いんじゃね
635:名無し~3.EXE
11/11/09 18:52:01.56 y4E29ing
コマンドプロンプトのプロパティのレイアウトタグでバッファサイズと画面サイズを指定できますが、
cmd.exeの起動オプションかバッチファイル内で同等の指定をする方法はあるのでしょうか?
ご存知の方がいましたら教えて欲しいです。よろしくお願いします。
636:名無し~3.EXE
11/11/09 19:07:40.97 OD6GvI9M
mode/?
637:635
11/11/09 20:40:15.34 y4E29ing
>>636
ありがとうございます。助かりました。
638:名無し~3.EXE
11/11/12 08:50:42.69 1vH/LxN0
コマンドプロンプトでtelnetを開始して、
open ホスト名 80
って打っても、2秒ぐらいした後にバグって入力のバーがコマンドプロンプトの左上(最初の位置)に戻るんですが、
これはバグですか?
7でやっても別のPCのXPでやってもこうなりました。
そのままGETコマンドとか打っても受け付けてはくれるんですが、見にくくてしかたありません。
639:名無し~3.EXE
11/11/12 13:02:43.31 6LWtYEOA
>>638
telnetの仕様です
640:名無し~3.EXE
11/11/18 20:51:02.21 pxVyOoVa
GNU grep 使っていたが、日本語はうまくいかないこともあるのを発見
こまったアル
2.5.1
641:名無し~3.EXE
11/11/18 21:12:14.79 Dyiu+uA+
yagrepとか
URLリンク(www.kt.rim.or.jp)
642:名無し~3.EXE
11/11/18 23:25:45.26 CC6V9VYv
>>641
ありがとうございます。
findstr というツ-ルもあるようですが、たしかどっかに問題があった。
643:名無し~3.EXE
11/11/19 00:05:46.04 zaMlMwTR
findstrは標準で入ってるやつだよ
644:名無し~3.EXE
11/11/21 15:00:00.60 ngKnsBjW
文字列を貼り付けるときにマウスの右クリックでメニューを表示して貼り付けてますが
マウスを使わずにキーボードで貼り付けるショートカットってありませんか?
645:名無し~3.EXE
11/11/21 15:12:34.21 lBNK4PnM
alt+space e p
646:名無し~3.EXE
11/11/23 05:35:55.96 nwtiGPYP
電波テロ装置の戦争(始)
魂は幾何学、コピー出来る公安はサリンオウム信者の子供を40歳まで社会から隔離している
オウム信者が地方で現在も潜伏している
それは新興宗教を配下とする公安(慶應卒T)の仕事だ発案で盗聴器を開発したら霊魂が寄って呼ぶ来た
<電波憑依>
スピリチャル全否定なら江原三輪氏、高橋佳子大川隆法氏は、幻聴で強制入院矛盾する日本宗教と精神科
<コードレス盗聴>
2004既に国民20%被害250~700台数中国工作員3~7000万円2005ソウルコピー2010ソウルイン医者アカギ絡む<盗聴証拠>
今年5月に日本の警視庁防課は被害者SDカード15分を保持した有る国民に出せ!!<創価幹部>
キタオカ1962年東北生は二十代で2人の女性をレイプ殺害して入信した創価本尊はこれだけで潰せる<<<韓国工作員鸛<<<創価公明党 <テロ装置>>東芝部品)>>ヤクザ<宗教<同和<<公安<<魂複<<官憲>日本終Googl検索
647:名無し~3.EXE
11/11/24 02:17:34.51 2V91NEL2
>>644
キーボードじゃなくてスマンが
プロパティのオプションタブで簡易挿入モードをONにすると
マウスの右クリックだけで貼り付けられるよ。
648:名無し~3.EXE
11/11/24 02:19:58.34 2V91NEL2
↑「簡易編集モード」の間違い
649:名無し~3.EXE
11/11/25 00:49:12.77 ujh3KFvf
隠しフォルダ内のファイルをコマンドでコピーするときってどうやるの?
650:名無し~3.EXE
11/11/25 01:12:14.11 mEbPOXRQ
おんなじだけど
651:名無し~3.EXE
11/11/25 02:10:16.55 ujh3KFvf
xcopy? アクセスできなくない?/H とか?
Win7のAPPDATA内のSleipnirお気に入りを別の場所にコピーするバッチ作りたいんだけど…
xcopy で/Hってやってもダメなんだけど必要なオプションとかある?
652:名無し~3.EXE
11/11/25 02:40:27.85 mEbPOXRQ
copyでできるが?
653:名無し~3.EXE
11/11/25 02:42:45.10 mEbPOXRQ
ほら
>md aaa
>echo >aaa\aaaaa
>attrib +h aaa
>copy aaa\aaaaa
1 個のファイルをコピーしました。
654:名無し~3.EXE
11/11/25 02:50:59.27 iDpkqVLx
俺は使ってないので、Sleipnirお気に入りでググってみたところ
C:\Users\<ユーザー名>\AppData\Roaming\Fenrir & Co\Sleipnir
の下に
Favorite.ffv(お気に入り)、
FavoriteGroup.ffg(お気に入りグループ)
の2つのファイルがあるそうだ。
xcopy使うまでもなくただのcopyで良いと思うけど、
問題ありそうなのはフォルダ指定じゃないのか?
(半角空白があるけど""で括ってないとか)
一度エラーになったbatをさらしてみたら?
655:649
11/11/27 00:22:34.36 1krBEMlR
>653,654
ありがとう、出来たよ!
原因はパスだった。
隠しフォルダにアクセス出来ないんじゃなくてパスが間違ってた。
Sleipnir2.* とSleipnir3はAPPDATA内のパスが違うみたい。
656:名無し~3.EXE
11/12/20 20:10:37.38 kZtmw/od
Linuxの話だけど、最近これやってみて激しく感動したんだけど
DSAS開発者の部屋:シェルスクリプトで標準入力を加工する際の注意点
URLリンク(dsas.blog.klab.org)
これと同じことWindowsで実現する方法ってないかなぁ
657:名無し~3.EXE
11/12/21 15:09:10.69 LATDZEHO
具体的に要件を言えよ
658:名無し~3.EXE
12/01/10 09:22:57.61 IzsMUOFe
MS-DOSとは一体何だったのか
スレリンク(poverty板)l50
659:名無し~3.EXE
12/01/20 20:09:35.34 hAB3eePX
教えてください。
フォルダ内のすべてのファイルのファイル名を
頭三文字を削除したファイル名にリネームしたいのですがどのようにしたらよいでしょうか?
例
リネーム前
01_ほげ.txt
02_hoge.bmp
リネーム後
ほげ.txt
hoge.bmp
660:名無し~3.EXE
12/01/20 20:32:11.97 UaxaTE60
for %%i in (*) do (set "x=%%i") & call ren "%%i" "%%x:~3%%"
661:名無し~3.EXE
12/01/20 20:55:17.28 hAB3eePX
>>660
ありがとうございます。
目的の作業が出来ました。
ただバッチファイルやリネームしたくないファイルもリネームされてしまうので
ファイル名の一文字目が数字の場合のみリネームするように改造できますか?
662:名無し~3.EXE
12/01/20 21:20:55.24 UaxaTE60
for %%i in (0* 1* 2* 3* 4* 5* 6* 7* 8* 9*) do (set "x=%%i") & call ren "%%i" "%%x:~3%%"
for %%i in (??_*) do (set "x=%%i") & call ren "%%i" "%%x:~3%%"
663:名無し~3.EXE
12/01/21 19:02:59.88 BeeQdxoC
>>662
ありがとうございました
664:名無し~3.EXE
12/01/24 03:52:12.29 QJ/7ug6o
if "%OS%" == "Windows_NT" (
echo This system is
echo running on NT technology.
) else (
echo This system is NOT
echo running on NT technology.
)
上記の記述だと問題はないけれど,
環境変数中に「()」が含まれる場合,エラーになるのだけれど回避する方法はあるのかいな
665:名無し~3.EXE
12/01/24 14:10:54.54 dHRJwv6C
エラーにならんぞ
666:名無し~3.EXE
12/01/24 15:35:45.64 QJ/7ug6o
間違えた。
「if...()」で囲まれるブロック中の環境変数に()が含まれる場合だった。
667:名無し~3.EXE
12/01/24 16:16:54.11 4k51VPeE
^^付けてあげるとか駄目かな。比較部分も書き換えなきゃいけなくなるけど。
それじゃあ困るんだよ !って言われても僕には分かりません
set string=^^(ab^^)c
echo %string%
if "%~1" == "" (
if "%string%" == "^(ab^)c" echo equal
echo %string%
echo .
)
668:名無し~3.EXE
12/01/24 16:48:53.45 DUAeQj0m
")"でエスケープ
または
!遅延展開!
669:名無し~3.EXE
12/01/25 01:24:48.79 QAFBVQGR
ラベルをコールするとか
670:名無し~3.EXE
12/01/25 02:45:35.27 FwrcBzZe
ラブコール
671:名無し~3.EXE
12/01/28 14:19:04.24 PD0QOKOk
TWEETコマンドを使ってツイートしてるのですが、
ツイートの改行方法が分かりません。
winのコマンドで文字列を改行するのはどうしたらいいんでしょうか?
672:名無し~3.EXE
12/01/28 14:45:58.28 Q0fjclzs
インターネットテンポラリフォルダにあるクッキー以外のファイルを一括で
削除したいのですがバッチファイルの記述など教えていただけませんでしょうか?
ゴミ箱にいれずに直接削除できたら便利なのですが
batファイルをファイル名を指定して実行から起動しようと思っています
ccleanerなどで削除するのをもっと手軽に出来たらなと思いまして
よろしくお願いします。
673:名無し~3.EXE
12/01/28 17:08:29.98 rYMqbgzQ
ClearMyTracksByProcess
674:名無し~3.EXE
12/01/28 17:29:15.45 Q0fjclzs
>>673 おぉ 見事に解決しました ありがとうございました
675:名無し~3.EXE
12/01/28 23:07:36.02 Q0fjclzs
>>673 解決はしたんですが 作成したリンクファイルのフルパスを
ファイル名を指定して実行する事が出来ない・・
.likだからだろうけど ちょっとだけ残念
676:名無し~3.EXE
12/01/28 23:12:31.27 rYMqbgzQ
.lnkを付ければええだろ
677:名無し~3.EXE
12/01/28 23:22:07.68 Q0fjclzs
>>676うーん もしかしてショートカットはデスクトップからうつしたらだめで
ファイル名変更もだめなのかな
リンクつけるとファイルノプロパティが開いてしまうんです。
あれ、もしかしてキャッシュのパスかえたからおかしくなったのかも・・
ちょっと試行錯誤してきます
678:名無し~3.EXE
12/01/29 22:31:12.30 TFEJcwTs
?
679:名無し~3.EXE
12/02/21 13:09:31.60 0LZ9ETD9
すいません。誘導されて来ました。
WindowsXP質問スレ 212ページ目
スレリンク(win板:548番)
548 名前:名無し~3.EXE[sage] 投稿日:2012/02/21(火) 12:11:40.50 ID:0LZ9ETD9
dosのバッチファイルで「あるコマンド実行後0.5秒休止」をループで繰り返したいときには
どうバッチファイルを記述すればよいのでしょうか?ループの中でコマンドを二回する方法がわかりません。
また休止コマンドは「ping localhost」を使えと言われたのですが・・
FOR %%F IN (*.拡張子) DO コマンド 0.5秒休止 %%F
680:名無し~3.EXE
12/02/21 13:59:19.42 6vXLOlLc
1秒以下・1秒以下単位のスリープは不可能。専用ツールでもあれば別。
681:名無し~3.EXE
12/02/21 14:37:30.15 KhHOee+Y
Usage: sleep time-to-sleep-in-seconds
sleep [-m] time-to-sleep-in-milliseconds
682:名無し~3.EXE
12/02/21 14:40:29.46 KhHOee+Y
使用法: ping [-t] [-a] [-n 要求数] [-l サイズ] [-f] [-i TTL] [-v TOS]
[-r ホップ数] [-s ホップ数] [[-j ホスト一覧] | [-k ホスト一覧]]
[-w タイムアウト] [-R] [-S ソースアドレス] [-4] [-6] ターゲット名
オプション:
-n 要求数 送信するエコー要求の数です。
-w タイムアウト
応答を待つタイムアウトの時間 (ミリ秒) です。
683:名無し~3.EXE
12/02/21 15:15:55.79 CXufj1to
203.0.113.0とか使うのが適当?
684:名無し~3.EXE
12/02/25 23:36:19.58 yy3S+6gu
>>679
>>680
>>681
Batch file SLEEP Command - Windows XP and DOS
URLリンク(malektips.com)
Windows Server 2003 ツール
URLリンク(technet.microsoft.com)
物が単純なだけに亜種がやたらとあるから適当に検索して片っ端から試すというのもアリかもw
685:名無し~3.EXE
12/02/27 01:27:01.87 LCTL9xSY
slmgr.vbs -dlvってなんすか?
686:名無し~3.EXE
12/02/27 01:31:07.14 QV8Wxsa0
メモ帳で開いてみれば分かるだろw
687:名無し~3.EXE
12/02/27 01:39:12.05 j7Geg3R6
>>685
ライセンス関係だからわかってても答えない
688:名無し~3.EXE
12/03/15 00:56:50.19 TshG/fxv
保守
689:名無し~3.EXE
12/04/14 20:29:56.42 di3PQnSS
バッチファイルにドラッグ&ドロップで、ファイル名にスペースのある物を使いたいのですが
"でくくっても正常に表示されないのですがどうしたらいいんでしょうか?
ドラッグ&ドロップしたファイル名 「a #01.gl」
echo %1
echo "%1"
pause
C:\>echo C:\a
C:\a
C:\>echo "C:\a"
"C:\a"
C:\>pause
690:名無し~3.EXE
12/04/14 20:32:04.23 zSF5e4bH
echo %*
echo "%*"
691:名無し~3.EXE
12/04/14 20:53:13.51 di3PQnSS
>>690
ありがとうございます。
スペースが、あったり、なかったりする、複数ファイルを扱うことはできないんでしょうか?
692:名無し~3.EXE
12/04/14 21:14:54.00 sMJPc4ze
>>691
D&Dをエクスプローラ以外のファイラーでやってない?
エクスプローラではスペースあっても""でくくられているので %1 で問題ないのだが
ファイラーによってはくくられずにスペースで分割されてしまう。
693:名無し~3.EXE
12/04/14 21:18:50.46 fOvpJLhU
>>691
全角スペースじゃなく半角スペースならいけるはず。
コマンドプロンプトだけじゃなく他のプログラムでも問題を起こす場合があるから
ファイル名の全角スペースはできるだけ避けた方が無難かと。
694:名無し~3.EXE
12/04/14 21:43:35.18 di3PQnSS
%*だと、%~nx1とかも使えないんですね・・
>>692
windows7で普通にドラッグ&ドロップしているだけなんですが・・・
>>692
他のソフト(TvRock)で自動に作られてしまうのでどうしようも・・・
自動でスペース消したりする方法とかありますかね?
695:名無し~3.EXE
12/04/14 22:19:03.34 fOvpJLhU
>>694
リネームツールを使えば簡単に変更できるはずだけど
このスレ的にやるなら↓こんなん?
正直あんまり自信ないから
もし使うなら空のテキストファイルあたりに同じファイル名を付けて
ちゃんとリネームされるかどうか確認してからの方がいいと思う。
::実行ディレクトリ内にあるファイル名の全角スペースを半角スペースに置換する
::全角スペースを含むファイルをリネーム処理に送る
for /f "delims=" %%a in ('dir /a:-d /b "* *"') do call :sub "%%a"
::終了処理へジャンプ
goto :eof
::リネーム処理
:sub
set f=%1
ren %f% %f: = %
::終了処理
:eof
696:名無し~3.EXE
12/04/14 23:53:29.20 di3PQnSS
>>695
いけそうです。ありがとうございました。
697:名無し~3.EXE
12/04/14 23:53:31.02 zSF5e4bH
なことせんでも半角スペースのあるフォルダに置いてそこからD&Dすればオッケーよ
698:名無し~3.EXE
12/04/15 01:15:17.41 JtiIA/U/
引数って、全角スペースでも区切られるのかぁ
長年コマンドプロンプト使ってるつもりだったけどぜんぜん気付いてなかった
勉強になった
699:名無し~3.EXE
12/04/15 01:18:57.23 WF4W96cn
仕様じゃないよ単なるバグよ直らんけど
700:名無し~3.EXE
12/04/17 00:54:04.23 FGe60Pe5
いったん半角スペースのあるフォルダにおいて、でもいいので
ファイル名の全角スペースと半角スペースをアンダーバーに変えたいのですが、
バッチファイルにD&Dだけで、
しているのですが、以下を2回かけるしかないのでしょうか?
2つの条件でrenや、renした後のものを確認できますか?
(2つとも可能なのでしたらやり方も教えていただけるとありがたいです。)
for %%a in (%*) do call :sub %%a
goto :eof
:sub
set f=%~nx1
echo %f%
ren "%f%" "%f: =_%"
ren "%f%" "%f: =_%"
:eof
701:名無し~3.EXE
12/04/17 05:10:55.09 Gava50qZ
そうだね
702:名無し~3.EXE
12/04/17 05:21:09.19 rxVaCTrW
全部置換した名前を生成後、最後にrenじゃダメなのか?
一応、半角スペースのフォルダに置かなくても以下のようにすれば大丈夫じゃないかな?
@echo off
set pname=%*
if not defined pname echo ファイル名を指定してください&pause&&goto :eof
set pname="%pname:"=%"
call :sub %pname%
echo 置換:^<%r%^> %pname% ===^> %fname%
rem if %r% equ ON if exist %dir%%fname% echo 既存ファイルがあって置換できない
ren %pname% %fname%
pause
goto :eof
:sub
set dir="%~dp1"
set f="%~nx1"
set fname=%f: =_%
set fname=%fname: =_%
if %f% neq %fname% (set r=ON) else (set r=OFF)
goto :eof
703:名無し~3.EXE
12/04/17 10:36:12.10 3+X2uaPe
よくあることだが、半角スペースがあるとわかりきってるのに
""でくくらないとボロボロだろそれ
704:名無し~3.EXE
12/04/17 16:05:55.18 BY2k4WaO
>>703
そもそもの原因は「全角スペースに対して自動的に""が付加されない」ことにある。
変数をそのままくくっちゃうと、全角スペースだけの場合は正常に動くけど
半角スペースを含んでいる場合は「""C:\ho ge\ho ge.avi""」となって失敗する。
>>702では一旦「"」を置換処理で除去してからくくってるみたいだから
どのケースでも問題なく動くと思う。
705:名無し~3.EXE
12/04/17 17:29:35.38 rxVaCTrW
>>703
一応簡単にはテストしてアップしたわけだからボロボロってほどでも無いと思いたいが、
ダメなケースってどういう場合だろ?
706:名無し~3.EXE
12/04/17 18:01:16.92 FGe60Pe5
>>702
ありがとうございます。
どう置換しているのかあまりよくわかってないですが、複数ファイルをまとめてD&Dするなら、
フォルダ名に半角スペース入れて、こんな感じでしょうか?
@echo off
for %%a in (%*) do call :suba %%a
:suba
set pname=%*
if not defined pname echo ファイル名を指定してください&pause&&goto :eof
set pname="%pname:"=%"
call :sub %pname%
echo 置換:^<%r%^> %pname% ===^> %fname%
rem if %r% equ ON if exist %dir%%fname% echo 既存ファイルがあって置換できない
ren %pname% %fname%
pause
goto :eof
:sub
set dir="%~dp1"
set f="%~nx1"
set fname=%f: =_%
set fname=%fname: =_%
if %f% neq %fname% (set r=ON) else (set r=OFF)
goto :eof
707:名無し~3.EXE
12/04/17 20:13:43.12 BY2k4WaO
>>706
「%*」って全ての引数を表示するって意味だから、複数ファイルをD&Dすると
それら全てが1つのファイル扱いになって失敗すると思う。
ていうか、「call :suba %%a」じゃ:subaに渡す時にスペースのところで分割される。
708:名無し~3.EXE
12/04/17 22:14:25.59 rxVaCTrW
半角スペースのあるフォルダでないとダメって言ってる理由がわかった。
BAT環境にファイル名が正常に渡ってこない場合があることを忘れてたよ。
俺も>>586(以降の一連のレス)で忠告したことがあったのに、自分自身がそれに引っかかっちゃった。orz
(例 a b&c.txtとか)
>>706
半角スペースを含むフォルダを指定するとして
for %%a in (%*) do call :suba %%a
を
for /r %1 %%a in (*) do call :suba %%a
pause
goto :eof
に変えて、下にあるpauseを取れば一応は動作と思うが、半角スペースを含む場合なら
無駄なことをしてるので自分で考えて改造してよ。
さらにパラメタがフォルダかどうかチェックすればもっといい。
(ルートでない場合、"c:\hoge"なら"c:\hoge\."が存在するかどうか)
709:名無し~3.EXE
12/04/17 23:00:24.68 rxVaCTrW
フォルダ名じゃなくて複数ファイルのD&Dなら、次のような感じで。
:loop
for %%a in (%1) do call :suba %%a
shift
if exist %1 goto loop
710:名無し~3.EXE
12/04/17 23:04:17.20 rxVaCTrW
いやfor文の変わりに単に、call :suba %1
でいいや。
711:名無し~3.EXE
12/04/17 23:32:06.75 Gava50qZ
なにやってんだかあほか
712:名無し~3.EXE
12/04/19 22:06:34.90 7S6I67D2
コマンドラインで漢字交じりの文をローマ字変換したいのだけど
kakasiを使ってみたら「ん」の後に母音が来ると「ん」が「n'」に変換されてしまうので困っている。
元文が「'かんおん'」というような''で囲まれた文なので中身に「'」が入るのは困る。
平仮名だけなら簡単に事前置換等で対応できそうだけど、漢字の読みがそうなる時がある…
総計10GB位のテキストなので手作業なんて非現実的なにかいい方法はないだろうか?
713:名無し~3.EXE
12/04/19 22:13:34.44 4MPi1VgC
>>712
元文の「'」を絶対に一致しない文字に置き換えるのが無難のような気がする。
714:名無し~3.EXE
12/04/20 12:49:16.86 gxdpXMXl
やっぱりそれしかないか…
ちょっと誤爆が怖いけど。
715:名無し~3.EXE
12/04/28 21:20:23.05 krL2uB3+
お前らがアスペっていうのは昔から聞いてたけどほんとなんだな
この流れはどうみても「ラーメンは何味が好き?」だろ
こんなこともわからないとかやっぱりアスペだなお前ら
716:名無し~3.EXE
12/04/28 21:59:29.20 BWKqevXj
誤爆か遅レスか知らんがこれほど天唾乙と言えるレスもないな
717:名無し~3.EXE
12/05/02 03:47:39.01 wQplHjdm
「a+b.txt」というファイル名をバッチファイルで記述するときはどうやるのでしょうか?
+をエスケープ文字で回避すると思うのですが。。
copy C:\a+b.txt C:\
718:名無し~3.EXE
12/05/02 03:52:22.88 wQplHjdm
> copy C:\a+b.txt C:\
ディレクトリーを変えないといけなかった。 copy C:\a+b.txt C:\d
コピーじゃなくてファイル移動だと move C:\a+b.txt C:\d
でうまくいくのですが。
719:名無し~3.EXE
12/05/02 03:59:09.31 wQplHjdm
copy C:\"a+b.txt" C:\d
で出来ました。
720:名無し~3.EXE
12/05/02 12:32:25.76 wxWeUOsq
cmd/?
引用符が必要な特別な文字は次のとおりです:
<スペース>
&()[]{}^=;!'+,`~
721:名無し~3.EXE
12/05/13 17:19:57.01 gmM8szhr
コマンドプロンプトについての質問なんですが、日本語入力をON,OFFするコマンドはありませんか?
バッチファイルに書き込んで使いたいと思っています。
722:名無し~3.EXE
12/05/13 19:41:47.52 pSaSucf4
createobject("wscript.shell").sendkeys "%{kanji}"
723:名無し~3.EXE
12/05/13 22:11:56.36 gmM8szhr
>>722
.NETの関数でしょうか。
VBSファイルを作ってバッチファイルから呼び出してみましたがうまくいきませんでした。
どうやって使えばいいのですか?
724:名無し~3.EXE
12/05/14 18:50:06.18 yob5yN8B
VBAのsendkeysかWin32APIのkeybd_eventを使うんだな
725:名無し~3.EXE
12/05/15 10:11:19.08 4YpaanVg
WindowsXP Homeを使っています
ネットワークドライブを使うとき、起動ごとにパスワードを聞かれます
netコマンドでどうにかなりませんか?
726:名無し~3.EXE
12/05/15 11:19:37.48 1F1dODdR
NET HELP USE
URLリンク(ja.lmgtfy.com)
727:名無し~3.EXE
12/05/27 11:15:46.97 Zi/Qv7V4
test.txtが
aaa
bbb
ccc
という内容の時に
cmd /v:on
for /F %i in ('type test.txt') do @set s=!s!%i
echo %s%
とやると
!s!aaabbbccc
と改行が削除された状態で表示されますが、最初の!s!を入れないようにすることは出来ないのでしょうか?