【.cmd】 バッチファイルスクリプト %11 【.bat】at TECH
【.cmd】 バッチファイルスクリプト %11 【.bat】 - 暇つぶし2ch621:デフォルトの名無しさん
16/09/08 21:40:41.34 5x3R57hb.net
setlocal enabledelayedexpansion
set STR="aaa"
if STR=="aaa"(
STR = "bbb"
echo !STR!
)
echo !STR!
echo %STR%
遅延環境変数が分からない


622:のですが、自分の環境だと全て"aaa"になります。 どこが間違っているんでしょうか?



623:590
16/09/08 21:53:39.72 5x3R57hb.net
すいません。適当に書いてしまったのを訂正します
・"bar"が出て上手く行かないケース
@echo off
setlocal enabledelayedexpansion
set foo2="bar"
if %foo2% == "bar" (
set foo2 = "hoge"
echo !foo2!
)
pause
・"hoge"が出て上手く行くケース
@echo off
setlocal enabledelayedexpansion
set foo="bar"
if %foo% == "bar" (
set foo="hoge"
echo !foo!
)
pause
この2つの違いが分かりません。

624:デフォルトの名無しさん
16/09/08 21:58:24.35 5x3R57hb.net
自己解決しました
foo2と=の間に空白があるのが原因でした。
バッチは文字列を代入する際には空白があってはいけないのですね。
set foo2= "hoge"
としたら上手く行きました。
set /a foo2 = 10
では空白があっても行けたのですが、文字列の場合はダメなんですね。

625:デフォルトの名無しさん
16/09/09 03:51:09.43 LpeB3e0i.net
Linuxのシェルスクリプトでも、変数代入時、= の前後に、半角空白を入れられない
a=b
a = b これはダメ
こういう点が、プログラミング言語としてはクソなんだよ。
PowerShell_ise を使いな

626:デフォルトの名無しさん
16/09/09 06:34:14.46 Sx9RRTJO.net
>この2つの違いが分かりません。
そんな違いわかりたくもない
バッチファイルでif文をトラブルなく使う - Qiita
URLリンク(qiita.com)
バッチファイルでif文を使っていてハマったので、ハマらないための書き方と注意点をまとめてみた
解決方法
何も考えず必ず以下の形で書く。
if 条件 ( ←(1)
call :サブルーチン名 引数 ←(2)
) else if 条件 ( ←(3)
call :サブルーチン名 引数
) else ( ←(4)
call :サブルーチン名 引数
) ←(5)

627:デフォルトの名無しさん
16/09/10 14:10:07.42 WyiyFmBQ.net
>>597
ダブルクォート記号を意図して含めたいならそういう記述もありだろうね
だけど、純粋に文字列だけ比較したいだけなら変数名も含めてくくって、あとは判定部分で整形する方が自由度がある
set

628:デフォルトの名無しさん
16/09/10 14:14:02.54 WyiyFmBQ.net
途中で切れた?全角でリトライ
SET "foo= b a r "
IF "%foo%"==" b a r " (
IF "%foo%" == " b a r " (
のようにすれば前後の空白も含めて評価されるし、この場合どちらも同じ結果が得られる
なので、>>598の「バッチは文字列を代入する際には空白があってはいけないのですね。」は誤り
変数の文字列前後、if文のイコール記号の前後の空白の有無で意図しない比較結果になり得る記述は避けたほうがいいのは自明
環境変数の遅延展開に関しては、カッコで囲んだ複文の挙動を把握した上で適切に使う
環境変数はあとから再利用する性質上、意図しない文字や空文字になってしまうのが一番怖い
別解としては、call set "foo=hoge" があり、echo;%%foo%% などのようにパーセント記号を重ねても同じ結果が得られる
こちらは setlocal enabledelayedexpansion は不要、この方法は公式とは言えないのでユーザーのお好み次第といったところ

629:デフォルトの名無しさん
16/09/11 01:07:52.20 4x/hjQLW.net
sqlite3のコマンドラインツールでDB読込み時間を測って遊んでたら
sqlite3 hoge.db "SELECT * FROM TEST" > nul よりも
sqlite3 hoge.db "SELECT * FROM TEST" > "c:\Temp\hoge.txt" のほうが
出力完了までの時間が短かったんですが、出力をnulに捨てるのって
普通にファイルに吐くより遅くなるもんなんでしょうか。

630:デフォルトの名無しさん
16/09/11 01:24:31.36 zfXOe+JX.net
>>603
常にそうなるの?
たまたまじゃなくて?
db読み込みの時間とかが関係してきそうな気がするし
それに


631:write時間は以外に掛からないんでファイルがでかくなければnulとの差はつかない (read時間は掛かるし実行時間にかなりばらつきが出る、また2回目以降はキャッシュからになる)



632:デフォルトの名無しさん
16/09/11 02:05:36.54 zfXOe+JX.net
>>603
ちょっと試してみた
確かにnulの方が時間が掛かる
そこで、sqlite3の代わりに、type xxx.txt >yyy.txtで試してみた
やっぱりファイルに書き出すよりnulの方がはっきり時間がかかる
何故なのかは分からん、スマン

633:デフォルトの名無しさん
16/09/13 21:52:06.22 NwZGDC4j.net
コマンドプロンプトから実行して
処理しますか?(Y/N)⇒処理⇒処理完了後F3キー押すとして終了
するツールを毎日ポチらないといけないのですが
txtにYとF3を書いてリダイレクトで自動入力すれば楽にポチれる気がするんですが
F3をtxtファイルにどう書けばいいのかわかりません、助けてください

634:デフォルトの名無しさん
16/09/14 06:17:54.15 xpMA1gBQ.net
F3は無理だと思うけど・・・

635:デフォルトの名無しさん
16/09/14 08:44:57.03 f2EPB9Ji.net
>>606
uwscでやれば?

636:デフォルトの名無しさん
16/09/14 17:27:36.03 Jy6DKzEX.net
>>608
ありがとうございます
EXECでバッチファイル起動してYとF3入力してexit⇒ENTERで終了するようマクロ組みました
タイマー起動ソフトでUWSを指定時間に実行するようにしたので何もしなくてよくなりました
ありがとうございます

637:デフォルトの名無しさん
16/09/19 03:08:13.70 3gpWvjZ8.net
cmdですが
schtasksでstartコマンドがうまく使えません
/tr "start フルパス実行ファイル名"
※パスにはスペース無しです

638:デフォルトの名無しさん
16/09/19 03:34:12.50 rks5/FmO.net
>>610
cmd内部コマンドを起動するように登録するなら
"cmd /c start xxx"
だけど、単に
/tr xxx
じゃああかんの?(xxxはフルパスの実行ファイルなんでしょ?)

639:デフォルトの名無しさん
16/09/19 04:07:56.77 3gpWvjZ8.net
>>611
速いレスポンスありがとうございます
おっしゃる通りどちらもいけました!
もともとスペースありのパスで悩んで
/tr "フルパススペース混じり" …1
/tr "\"フルパススペース混じり\"" …2
上記1.2から始まり詰まってましたが
お陰様でstartの使い方がわかりました

640:デフォルトの名無しさん
16/09/19 12:05:07.29 mqRkSqP8.net
startは引数にスペースが混じるとおかしくなる
その場合は第一引数に空文字列入れると良い
start "" "c:\program files~"

641:デフォルトの名無しさん
16/09/22 20:07:59.66 yIBGfr99.net
taskkill /im explorer.exe
start explorer
をバッチにしてエクスプローラ再起動に使ってたんだけど
最近explorer.exeが見つかりませんってなってkillできないんだけど何でだろう
タスクマネージャからなら止められるしPID指定でも止められるんだけど

642:デフォルトの名無しさん
16/09/27 11:38:03.47 clgfgzqk.net
10か

643:デフォルトの名無しさん
16/09/28 19:18:04.93 zhCs69qF.net
下記バッチファイルで call を実行する
@echo off
set a1=%%a2%%
set a2=%%a3%%
set a3=%%a4%%
set a4=%%a5%%
call echo %a1%
call echo %a1% | more
pause
結果は
%a3%
%a4%
なぜか表示が違う
パイプを使うと変数の展開が一回増えるようだ

644:デフォルトの名無しさん
16/09/29 00:33:45.25 RC/Dq8j5.net
パイプは、子タスクでインスタンスは別だと思うよ
set a=1
echo %a%|(more|set a=2)
echo %a%

645:デフォルトの名無しさん
16/09/29 00:34:51.35 RC/Dq8j5.net
echo %a%|(more&set a=2)

646:デフォルトの名無しさん
16/09/29 02:15:55.37 HmIZKCJu.net
echo %a1%
echo %a1% | more
%a2%
%a3%

647:デフォルトの名無しさん
16/09/29 02:29:13.86 HmIZKCJu.net
call call echo %a1%
call call echo %a1% | more
%a4%
%a5%

648:デフォルトの名無しさん
16/10/07 02:33:21.18 E4yfr


649:V8y.net



650:デフォルトの名無しさん
16/10/07 02:39:36.76 E4yfrV8y.net
>>621
追記ですが
"/"の数は変動します

651:デフォルトの名無しさん
16/10/07 03:13:06.25 PWoZvLSt.net
bat素人が適当に書いたらこうなった
set token_number=1
:start
for /f "tokens=%token_number%,* delims=/" %%a in ("/aaa/bbb/ccc") do if "%%b"=="" (
set hoge=/%%a
) else (
set /a token_number=token_number+1
goto start
)
echo %hoge%
pause

652:デフォルトの名無しさん
16/10/07 03:33:35.13 RDmrItg+.net
ちょっと邪道だけど
powershell -Command

653:デフォルトの名無しさん
16/10/07 03:34:29.48 RDmrItg+.net
切れたので再送
powershell -Command Split-Path -Path /aaa/bbb/ccc -Leaf

654:デフォルトの名無しさん
16/10/07 03:44:17.59 273HGXTN.net
>>621
tmp に & や % 等々が入っていない、ダメな文字が無いという楽観的な状態なら
set tmp=/aaa/bbb/ccc/ddd eee
call %tmp:/=&set tailpart=%
echo %tailpart%

655:デフォルトの名無しさん
16/10/07 10:20:31.14 uWLqn+Rg.net
echo [ERROR][%~n0][%date% %time%] エラー出た(ERRORLEVEL=%ERRORLEVEL%)
これ標準エラー出力で出力するのってどうやるんですか?

656:デフォルトの名無しさん
16/10/07 10:47:05.46 yoIkF7ck.net
>>627
標準出力先を標準エラー出力先と同じになるようにリダイレクトしてやるとかかな
(意図がわからんからこれで解決するのかどうかは知らんけど)
echo xxx 1>&2

2>errout.txt 1>&2 echo エラー(err no=111)

657:デフォルトの名無しさん
16/10/07 11:05:50.41 yoIkF7ck.net
出力先が同じだから、2>errout.txt は >errout.txt に書き替えても同じ結果になることからも分かるように
やってることはあくまで出力先を同じにしてるだけなので、標準エラー出力のみを取り扱ってるわけではないことに留意
(なお 1> の 1 は省略可能なので、 1>&2 は >&2 と書くことも可能)

658:デフォルトの名無しさん
16/10/07 11:23:31.75 uWLqn+Rg.net
echo aaa
echo bbb 1>&2
echo ccc
で試したところ望みどおりの動作になりました
ありがとうございます

659:デフォルトの名無しさん
16/10/07 11:44:29.04 5wS7M9ck.net
>>621
案1:
FOR /F "delims=" %%I IN ("/aaa/bbb/ccc") DO ECHO %%~nxI
案2:
CALL :SUB "/aaa/bbb/ccc"
GOTO :EOF
:SUB
ECHO %~nx1

660:デフォルトの名無しさん
16/10/07 12:09:19.90 PWoZvLSt.net
色んなやり方があるんだなあ勉強になる

661:デフォルトの名無しさん
16/10/08 07:09:00.83 sXvXMvPu.net
@echo off
set "a=/aaa/bbb/ccc\ddd"
set "b="
call :x a b
echo "%a%"
echo "%b%"
pause
goto :eof
:x
setlocal enabledelayedexpansion
set "a=/!%1!"
set b=-1
:y
set "c=!a:~%b%,1!"
if "!c!" == "/" goto z
set /a b-=1
goto y
:z
set "c=!a:~%b%!"
endlocal & set "%2=%c%"
goto :eof

662:デフォルトの名無しさん
16/10/09 20:38:11.04 mq9cB08l.net
7z.exe x AAA.zip -oBBB >hoge.txt
7z.exeで展開してるんだけど、終了するまえに、
次の処理に行ってしまい、その後がエラーになる。
7z.exeの終了を待つには、どうしたらいいのですか?
>hoge.txtは必要。
start /wait 7z.exe x AAA.zip -oBBB >hoge.txt
では、hoge.txtが空だし、コマンドプロンプトの窓がもう一個開くし。 👀
Rock54: Caution(BBR-MD5:0be15ced7fbdb9fdb4d0ce1929c1b82f)


663:デフォルトの名無しさん
16/10/09 21:25:06.80 DFuD


664:/t4t.net



665:デフォルトの名無しさん
16/10/10 09:40:47.22 UJJq0Lfa.net
>>635
ありがとうございます。
10回くらいテストして、それ「start /B /wait "" 」でいけました。

666:デフォルトの名無しさん
16/10/12 15:15:40.33 CXMCNpce.net
for %%a in (“*.mkv”) do ffmpeg.exe -i %%a -b:v 3000k -acodec ac3 -ar 48000 -vcodec libx264 D:\encoded\%%~na.mp4

mkvとflvを入力に使いたいです
二重ループ以外に方法ありませんかね?

667:デフォルトの名無しさん
16/10/12 15:33:04.97 V1BPQ8PQ.net
`dir /b *.mkv;*.flv`をキャプチャすればいいんじゃないの
自分なら2行にコピペするがw

668:デフォルトの名無しさん
16/10/12 15:35:36.60 CyghQ6/+.net
"*.*v"
他にvが付くもの無ければ

669:デフォルトの名無しさん
16/10/12 15:38:43.19 CXMCNpce.net
>>638
すみません
2行にコピペするとはどういうことですか?

>>639
私も考えたのですがwmvがありました

670:デフォルトの名無しさん
16/10/12 16:07:30.74 aOSR32QX.net
for %%a in (*.mkv *.flv) do ...

671:デフォルトの名無しさん
16/10/12 16:12:00.02 YqqdfgOM.net
>>640
*.mkvで処理と*.flvで処理と2行for文を書くという意味じゃないかな?
for /f "tokens=*" %%a in ('dir /b *.mkv *.flv') do ~
とか
dir /b *mkv>files.tmp
dir /b *.flv>>files.tmp
for /f "tokens~*" %%a in (files.tmp) do ~
del files.tmp
とか色々とか色々と出来るよ

672:デフォルトの名無しさん
16/10/12 16:51:21.25 k+jI1aQa.net
質問です。サブディレクトリのファイルで、0バイトのファイルだけを削除したいです。
以下のページにあるサンプルをベースに、dirに /s をつけてサブディレクトリも
対象とするようにしました。
バッチで自動的に作成したファイルを容量チェックして削除する方法ってありますか? (DOSプロンプト活用相談室LOG)
URLリンク(fpcu.on.coocan.jp)
実行してみると、0バイト以外のファイルも条件が成立してしまい、
動作してくれません。OSがwindows10のせいでしょうか。
FOR /F %%F IN ('dir /s /B') DO ( CALL :CheckFile %%F )
EXIT /B
:CheckFile
SET FileAttrib=%~a1
IF NOT %FileAttrib:~0,1%==d (
IF not "%~z1" == "0" (
ECHO "%1" はファイルサイズが %~z1 で、0 なので削除します。
REM DEL %1
)
)
EXIT /B
==をEQUに変えてみたり、ダブルクォートをつけたりしましたが変化なしでした。
どのように直せば、0バイトのみが引っかかるようにできるか、宜しくお願いします。
なお、上記コードは、安全のためdelはREMをつけたままです。

673:デフォルトの名無しさん
16/10/12 17:01:12.97 k+jI1aQa.net
すいません補足です。
>IF not "%~z1" == "0" (
これは、notがないのが正常な状態です。
なにをやっても条件が成立してしまうので、
ためしにnotをつけて、論理が反転するか試したところ、
これも全部条件が成立してしまいました。
その実験をしたときの残骸のnotが残ってしまいました。

674:デフォルトの名無しさん
16/10/12 17:10:16.64 CyghQ6/+.net
if %~z1==0
のように書く。==の両側にスペース入れたらダメ

675:デフォルトの名無しさん
16/10/12 17:14:15.79 CyghQ6/+.net
それでもダメだったら
CALL :CheckFile %%~fF
を試してみて

676:デフォルトの名無しさん
16/10/12 17:19:24.35 CyghQ6/+.net
IF NOT %FileAttrib:~0,1%==d
これ必要?
dir /a-d /b /s としておけば要らない

677:デフォルトの名無しさん
16/10/12 17:32:19.00 k+jI1aQa.net
ありがとうございます。指摘の件を全て直しましたが、ダメでした。
FOR /F %%F IN ('dir /a-d /s /B') DO ( CALL :CheckFile %%~fF )
EXIT /B
:CheckFile
SET FileAttrib=%~a1
IF %~z1==0 (
ECHO "%1" はファイルサイズが %~z1 で、0 なので削除します。
REM DEL %1
)
EXIT /B

実行結果
 IF 1695606 == 0 (
 "F:\TEST\file.txt" はファイルサイズが 1695606 で、0 なので 削除します。

678:デフォルトの名無しさん
16/10/12 17:37:43.49 h3rHiOkq.net
set hoge="hage te naiyo"
とやると、%hoge%でダブルクォーテーションも読み込んでしまいます
対処法教えて下さい

679:デフォルトの名無しさん
16/10/12 17:44:13.80 X88zouZU.net
パスにスペースが入ってんじゃ?

for /f "delims=" %%i in ('dir /a-d /b /s *.*') do if %%~zi EQU 0 del "%%~fi"

680:デフォルトの名無しさん
16/10/12 17:46:49.24 tJlO+qdh.net
set "hoge=hage te naiyo"

set hoge=hage te naiyo
そもそも "" でくくらない

681:デフォルトの名無しさん
16/10/12 17:54:18.24 YqqdfgOM.net
>>648
本当にそんな表示なのか?
上の IF 1695606 == 0 ( を書いてるということはbatの展開された実行ステートメントを表示してるだけじゃないのか?
正確には
IF 1695606 == 0 (
ECHO "F:\TEST\file.txt" はファイルサイズが 1695606 で、0 なので 削除します。
REM DEL F:\TEST\file.txt
)
と4行表示されただけなんじゃないの?
それと、半角空白の存在するファイル名があったらエラーになるよ
"tokens=*"とか"delims="をつけて、引数は""で囲んで渡すようにした方がいい
(さらに^とかの文字もファイル名に含まれてる可能性があるなら引数渡しは諦めて環境変数で渡すようにする)

682:デフォルトの名無しさん
16/10/12 17:56:29.96 CyghQ6/+.net
for /f "usebackq delims=" %%F in (`dir /a-d /b /s`) do if %%~zF==0 echo %%~F
これで0バイトだけechoされるはずだと思うけど

>>649
set "hoge=hage te naiyo"

683:デフォルトの名無しさん
16/10/12 18:07:46.52 YqqdfgOM.net
>>649
もし何らかの理由で""を付いたままで代入しなくてはいけないのなら、その後で取ることは出来る
set hoge=%hoge:"=%
とか
set hoge=%hoge:~1,-1%
とか
まあ後者は"が付いているかどうかチェックした方がいいけど
if ^%hoge:~0,1% equ ^" set hoge=%hoge:~1,-1%

684:デフォルトの名無しさん
16/10/12 18:12:36.27 CyghQ6/+.net
後から外す場合はcallやforで%~1や%%~Iでも可

685:デフォルトの名無しさん
16/10/12 18:13:42.95 k+jI1aQa.net
>>652
すみません、こちらの勘違いでした。教えていただいたコードで動きました。
echo off していないため、条件が成立しないコードが表示されてるのを見て、
あたかも実行されているかのように勘違いしてるだけでした。

この手のトラブルが嫌いなので対象のファイル名に空白は入っていませんでした。
完成形ですが、空白が含まれているファイル名も処理する場合は、以下で大丈夫でしょうか。

echo off
FOR /F %%F IN ('dir /a-d /s /B') DO ( CALL :CheckFile %%~fF )
echo 処理終わり。
pause
EXIT /B

:CheckFile
SET FileAttrib=%~a1
IF "%~z1"=="0" (
ECHO "%1" はファイルサイズが %~z1 で、0 なので削除します。
DEL "%1"
) else (
ECHO "%1" はファイルサイズが %~z1 で、削除しません。
)
EXIT /B

686:デフォルトの名無しさん
16/10/12 18:31:53.33 k+jI1aQa.net
うーん・・・このバッチだと、0バイトかどうか調べる対象ディレクトリが1000個、総ファイルが10万個とか有ると、
最初のforから全然進んでくれないようです。
core-i5で10分待っても開始されず。ディスクの能力じゃ無く、BATのCPU消費率が上がります。
>>653さんの書き方で、大量ファイルの処理時の挙動は変化するか、これから試してみます。
大量処理に適した書き方などがあったらご教示ください。

687:デフォルトの名無しさん
16/10/12 18:44:53.26 YqqdfgOM.net
>>657
そんな大量のファイルは無いので定かではないけど、多分バッファが溢れてるんじゃないかと思う
一旦ファイルに書き出したらどうだろ?
dir /a-d /s /b>list.tmp
for /f %%F in (list.tmp) do

688:デフォルトの名無しさん
16/10/12 18:59:59.00 CyghQ6/+.net
10万とか処理させたこと無いけどバッチよりもPowerShell使った方が良いんじゃね?

689:デフォルトの名無しさん
16/10/12 19:01:10.45 RjRHLuRO.net
>>642
ありがとうございます
出来ました
それともう一つ
エンコードの進捗状況を表示する事ってできませんかね?
12/87(ファイル)みたいな感じで

690:デフォルトの名無しさん
16/10/12 20:02:06.24 nxsWiPWy.net
forfiles使う方法も
forfiles /s /c "cmd /c if @isdir==FALSE if @fsize==0 del @file"

691:デフォルトの名無しさん
16/10/12 20:08:20.15 IaZq30Xa.net
Windows 10 だと rd hoge /S /Q でなかなかhogeディレクトリを削除できないけど、
なにかいい方法ありますか?

692:デフォルトの名無しさん
16/10/12 20:19:09.72 WWSUEmVo.net
>>661
for が速いとは言わないが forfiles は輪をかけて遅いから辛いんじゃないかな

693:デフォルトの名無しさん
16/10/12 20:31:06.50 YqqdfgOM.net
>>660
大昔DOSにあったansi.sysのようにエスケープシーケンスが使えたら可能なんだけどね
噂じゃwinsows10でエスケープシーケンスが使えるようになったとかの話もあるけど真偽のほどはどうなんだろ

694:デフォルトの名無しさん
16/10/13 00:46:44.28 cRZfvb+W.net
>>656
以下に修正したほうがいいけど、ざっと見ただけだから他にもあるかもw

FOR /F %%F IN ('dir /a-d /s /B') DO ( CALL :CheckFile %%~fF )

FOR /F

695:デフォルトの名無しさん
16/10/13 00:49:54.35 cRZfvb+W.net
FOR /F %%F IN ('dir /a-d /s /B') DO ( CALL :CheckFile %%~fF )

FOR /F "delims=" %%F IN ('dir /a-d /s /B') DO ( CALL :CheckFile "%%~fF" )

IF "%~z1"=="0" (

IF %~z1==0 (

ECHO "%1" はファイルサイズが

ECHO "%~1" はファイルサイズが

DEL "%1"

DEL "%~1"

サブルーチンへ引数を渡す際はダブルクォート記号が過不足なく評価されているか実行前に要テストね
それと、ifの数値比較についてはヘルプ読むべし。数字以外を含むと文字列比較になるから

696:デフォルトの名無しさん
16/10/13 01:11:54.49 nRww2f6N.net
>>652が指摘してるけど、
もしファイル名が "a^b.txt" だったり、 "ab%cd%ed.txt" だったりしたらエラーになると思う

697:デフォルトの名無しさん
16/10/13 02:20:45.86 9ieIMwqB.net
>>657
FOR /R %%F IN (*.*) DO ( CALL :CheckFile %%~fF )

にしたらマシになる?

698:デフォルトの名無しさん
16/10/13 02:28:09.62 9ieIMwqB.net
あ、折角指摘が出てたのに修正漏れ

%%~fF → "%%~fF"

699:デフォルトの名無しさん
16/10/13 02:30:01.50 nRww2f6N.net
>>668
本来の目的だった半角空白のことを忘れたんか

700:デフォルトの名無しさん
16/10/13 08:14:45.67 CLiojDhV.net
>>667
そんなのまで対応しないといけないなら vbs とか PowerShell にした方がいいと思う

701:デフォルトの名無しさん
16/10/13 19:02:37.99 tpWzBOlc.net
call するなら環境変数で渡せば問題ない
つうか直接に del すりゃいいだけだろ
for /r %%i in (*) do if %%~zi == 0 del "%%~fi"
ファイル名に ^ とか % とか ユニコード特有文字とか有っても問題ない
あと、==の両側にスペースがダメとか意味不明

702:デフォルトの名無しさん
16/10/13 23:49:13.04 BSlfrai+.net
for %%a in (*hoge.txt) do ~
この場合、ファイル名がaiueohoge.txtだった場合、aiueoだけを抜き出す方法有りませんか?
%%~naみたいな演算子?でお願いします

703:デフォルトの名無しさん
16/10/14 01:11:11.25 Ep7xlThW.net
>%%~naみたいな演算子?でお願いします
無理
一旦環境変数に入れて置換でhoge.txtを消し残りを取り出す事%fname:hoge.txt=%や
%fname:~0,-8%なら可能
set fname=%%~na
echo %fname:~0,-4%

704:デフォルトの名無しさん
16/10/14 03:21:39.34 onADalnL.net
@echo off
set

705:デフォルトの名無しさん
16/10/14 03:24:46.91 onADalnL.net
set "fname=*hoge.txt" & set b=-1
setlocal enabledelayedexpansion
:x
if not "!fname:~%b%,1!" == "*" set /a b-=1 & goto x
endlocal & set /a b=%b%+1
for %%a in ("%fname%") do set "c=%%~nxa" & call echo "%%c:~0,%b%%%"

706:デフォルトの名無しさん
16/10/14 20:38:01.10 YifyNonQ.net
ありがとうございます
set

707:デフォルトの名無しさん
16/10/14 20:40:05.91 YifyNonQ.net
"ありがとうございます
set "fname=*hoge.txt" & set b=-1
setlocal enabledelayedexpansion
:x
if not "!fname:~%b%,1!" == "*" set /a b-=1 & goto x
endlocal & set /a b=%b%+1
for %%a in ("%fname%") do set "c=%%~nxa" & HOGE "%%c:~0,%b%%%"
ここでHOGEに処理を入れ、"%%c:~0,%b%%%"をファイル名として使えばいいんですかね?
それとfor文で入力に使った*hoge.txtのだけ*hogeだけ抜き出したい場合は


708:どうすればいいんでしょうか



709:デフォルトの名無しさん
16/10/14 22:54:24.45 +Ryxbx0f.net
>>678
call echo %%c:~0,%b%%%
は環境変数の遅延展開を使わず展開させる方法だから、別の処理で置き換えるなら、
HOGE !c:~0,%b%!
のように!記号でくくる方向で(call foo はどのコマンドでも使えるわけではないため)
ファイル名の抜き出しは、パラメーターで調整できると思う
バッチパラメーターについては「call /?」あたりから

710:デフォルトの名無しさん
16/10/14 23:02:08.75 +Ryxbx0f.net
ID違うからわかると思うけど、>>676とは別人なのであしからず(言い忘れすまそ)

711:デフォルトの名無しさん
16/10/14 23:39:49.51 Ep7xlThW.net
>aiueohoge.txtだった場合、aiueoだけを抜き出す方法有りませんか?
>>676が示してくれただけで
>HOGEに処理を入れ、"%%c:~0,%b%%%"をファイル名として使えばいいんですかね?
そんな質問されてもファイル名として使うのかどう処理するのかとか分かる訳ねーだろ
aiueoをリネームに使うのか?何がしたいのか分からん事には答えようがない

712:デフォルトの名無しさん
16/10/15 00:10:29.36 GrBj6Sia.net
>>678 質問の意図がよく分からん

set "fname=*hoge.txt" & set b=-1
setlocal enabledelayedexpansion
:x
if not "!fname:~%b%,1!" == "*" set /a b-=1 & goto x
endlocal & set /a b=%b%+1
for %%a in ("%fname%") do set "c=%%~nxa" & call :y "%%c:~0,%b%%%" "%%c%%"
goto :eof
:y
echo hoge "%~1" "%~n2"

713:デフォルトの名無しさん
16/10/15 23:20:33.46 DDtj3KwG.net
バッチ初心者です。
Windowsのタスクで指定時間した時間になったら、バッチファイルで指定した常駐ソフトを再起動(終了→起動)させたいのですが、
taskkill /f /im app.exe
start /MIN "" "C:\app.exe"
のようにして最小化(/MIN)で起動するようにすると、そのソフトは何故かウインドウのスクロールバーが何故か消えてしまいます。
なので一旦アクティブで起動させてスクロールバーを表示させてから最小化したいのですが、方法がわかりません。
taskkill /f /im app.exe
start "" "C:\app.exe"
で起動させたあと、アクティブなapp.exeをコマンドで最小化する方法があったら教えてください。
よろしくお願いします。

714:デフォルトの名無しさん
16/10/16 06:33:42.07 e+WiyjQC.net
バッチにそんな機能はない
ahkなら
IfWinExist ahk_exe app.exe
   WinMinimize

715:672
16/10/16 10:52:23.32 lNEScQ2P.net
抽象的な事を言って困らせてすみません
何をやりたいのかと言うと、youtubeから落とした動画がhoge -【DASH】.mp4とhoge - 【DASH】.m4aとなっているので、
これを
ffmpeg -i hoge - 【DASH】.mp4 -vcodec copy -i hoge - 【DASH】.m4a -acodec copy hoge.mp4
とエンコードして、
hoge【DASH】.mp4をforで検索して、その拡張子を取ったものを入力として使い、出力ファイル名として、hoge.mp4としたかったのです

716:デフォルトの名無しさん
16/10/16 17:03:52.47 z1QBGf3F.net
>>660
set /p で改行を入れない文字列を出力して
コントロールコードのBSで消す

@echo off
set bs=[BS]
set delline=%bs%%bs%%bs%%bs%%bs%%bs%%bs%%bs%%bs%%bs%%bs%%bs%%bs%
for /L %%i in (1,1,10) do (
set /p x=%delline%%%i/10 <nul
timeout /t 1 >nul
)

717:デフォルトの名無しさん
16/10/16 19:44:42.76 l/p5e+57.net
>>685
set "fname=* - 【DASH】.mp4" & set b=-1
setlocal enabledelayedexpansion
:x
if not "!fname:~%b%,1!" == "*" set /a b-=1 & goto x
endlocal & set /a b=%b%+1
for %%a in ("%fname%") do set "c=%%~nxa" & call :y "%%c:~0,%b%%%" "%%c%%"
goto :eof
:y
ffmpeg -i "%~n2.mp4" -vcodec copy -i "%~n2.m4a" -acodec copy "%~1.mp4"

718:デフォルトの名無しさん
16/10/16 21:03:50.48 cWFHk7WJ.net
>>686
コントロールコードを挿入できない人用
set bs=[BS]
  ↓
for /f "delims=0" %%I in ('cmd /u /c echo 〈') do set bs=%%I

719:その1
16/10/18 10:49:49.38 492hutXa.net
サーバサービスの起動条件がスタートアップ状態が自動でありながら
開始になっていないものをバッチで出力したい

とりあえずSCコマンドを使ってこんなことすると
sc \\HOGE query state= inactive |find "SERVICE_NAME" >hoge.txt

下記のような起動していないサービスの名前がテキストに吐かれる
SERVICE_NAME: AeLookupSvc
SERVICE_NAME: ALG
SERVICE_NAME: AppIDSvc
SERVICE_NAME: AppleChargerSrv
SERVICE_NAME: AppMgmt
SERVICE_NAME: aspnet_state
SERVICE_NAME: AudioEndpointBuilder
SERVICE_NAME: AudioSrv
SERVICE_NAME: AxInstSV
SERVICE_NAME: BDESVC
SERVICE_NAME: Browser
(以下 略)

720:その2
16/10/18 10:50:03.97 492hutXa.net
そしてサービスのスタートアップ状態を調べるには
sc qc [サービス名]で表示される
sc \\HOGE qc AeLookupSvc |findstr "SERVICE_NAME START_TYPE"

この2つを組合せればフルオートで起動条件がスタートアップ状態が自動でありながら
開始になっていないものを出せるはずなんだが
「SERVICE_NAME:」←これが邪魔なんだ
教えてエロい人

これが消せたら下記でフルオートできるはず
@for /F %%=a in ('hoge.txt') do (
sc \\HOGE qc %%a
)

721:デフォルトの名無しさん
16/10/18 12:27:03.23 6Un6ctsT.net
for /f "tokens=1*" %%A in (hoge.txt) do echo %%B

722:デフォルトの名無しさん
16/10/18 12:44:29.69 oqQNu1fO.net
for /f

723:デフォルトの名無しさん
16/10/18 12:46:48.12 oqQNu1fO.net
for /f "usebackq tokens=2*" %%a in ("hoge.txt") do sc \\HOGE qc %%a

724:デフォルトの名無しさん
16/10/18 12:59:57.92 oqQNu1fO.net
"tokens=1*" %%b が正しい

725:デフォルトの名無しさん
16/10/18 13:04:01.66 492hutXa.net
面目ない、誤解させてしまったかも
オイラが知りたいのは

sc \\HOGE query state= inactive |find "SERVICE_NAME" >hoge.txt

で出力される下記を
SERVICE_NAME: AeLookupSvc
SERVICE_NAME: ALG
SERVICE_NAME: AppIDSvc
SERVICE_NAME: AppleChargerSrv
SERVICE_NAME: AppMgmt
(以下 略)

先頭の文字列「SERVICE_NAME:」を外して出力したいというのが主旨です
AeLookupSvc
ALG
AppIDSvc
AppleChargerSrv
AppMgmt
(以下 略)

726:デフォルトの名無しさん
16/10/18 13:39:39.76 oqQNu1fO.net
for /f "tokens=1*" %%a in ('sc \\HOGE query state^=inactive ^| find "SERVICE_NAME"') do echo %%b >>hoge.txt

727:デフォルトの名無しさん
16/10/18 13:41:17.91 l1RYXy70.net
サービス扱うならPowerShellの方が楽でいいよ。
バッチから呼ぶならこんな感じ。
powershell -command

728:デフォルトの名無しさん
16/10/18 13:44:58.91 l1RYXy70.net
ダブルクオーテーション使うとそこで切れるんだけど書き込めてる人との違いってなんなんだろう

729:デフォルトの名無しさん
16/10/18 13:49:59.99 l1RYXy70.net
powershell -command ”Get-Service | ?{$_.StartType -eq 'Automatic' -and $_.Status -eq 'Stopped'}”

730:デフォルトの名無しさん
16/10/18 13:51:45.76 flBcMs6G.net
てすと
powershell -command "Get-Service | ?{$_.StartType -eq 'Automatic' -and $_.Status -eq 'Stopped'}"

731:デフォルトの名無しさん
16/10/18 13:52:36.16 UJ1l7XRj.net
setlocal enabledelayedexpansion
for /f "tokens=1,2 delims=:" %%i in ('sc \\HOGE query state^= inactive') do (
if "%%i"=="SERVICE_NAME" set name=%%j
echo;!name:~1!>hoge.txt
)

732:デフォルトの名無しさん
16/10/18 17:21:44.41 IWtXyw3/.net
ありがとうございます
早速試してみたのですが・・・

まずパワーシェルの方は「$_.StartType -eq 'Automatic'」これが効かないようです
(「$_.Status -eq 'Stopped'」こちらは効いてます)

バッチの方は1件目の「WwanSvc」だけで終ってしまうようです

733:デフォルトの名無しさん
16/10/18 17:24:37.38 XKgIhtEU.net
バッチファイルってWindowsタブレットで使える?

734:デフォルトの名無しさん
16/10/18 17:25:51.36 IWtXyw3/.net
大事な事を忘れてました

CL:Windows7プロ SP1(32bit)6.1.7601
SV:WindowsSV 2008R2 SP1(64bit)

735:デフォルトの名無しさん
16/10/18 17:59:25.19 oqQNu1fO.net
>「WwanSvc」だけで終ってしまう
>hoge.txtと上書きしてるんじゃ?>>hoge.txtと追記になってる?

736:デフォルトの名無しさん
16/10/18 20:40:09.09 UJ1l7XRj.net
アウチ!
ミスってた

>>705の通り。695追記になってない

×echo;!name:~1!>hoge.txt
〇echo;!name:~1!>>hoge.txt

737:デフォルトの名無しさん
16/10/18 22:14:57.94 N6eA0nOq.net
なるほど、追記になってなかったんですね
ただ、今度は同じサービス名が8回ずつ記録されるようになってしまいました
PCがおかしいのかなとwindows7とwindows8.1、そして懐かしのWindows2000で試しても
同じように8回ずつ記録されてしまうようです


AdobeFlashPlayerUpdateSvc
AdobeFlashPlayerUpdateSvc
AdobeFlashPlayerUpdateSvc
AdobeFlashPlayerUpdateSvc
AdobeFlashPlayerUpdateSvc
AdobeFlashPlayerUpdateSvc
AdobeFlashPlayerUpdateSvc
AdobeFlashPlayerUpdateSvc
ALG
ALG
ALG
ALG
ALG
ALG
ALG
ALG
AppIDSvc
AppIDSvc
AppIDSvc
AppIDSvc
AppIDSvc
AppIDSvc
AppIDSvc
AppIDSvc

738:デフォルトの名無しさん
16/10/18 22:41:11.76 UJ1l7XRj.net
type nul>hoge.txt
setlocal enabledelayedexpansion
for /f "tokens=1,2 delims=:" %%i in ('sc query state^= inactive') do (
if "%%i"=="SERVICE_NAME" (
set name=%%j
echo;!name:~1!>>hoge.txt
)
)

739:デフォルトの名無しさん
16/10/18 23:32:59.96 N6eA0nOq.net
>>708
成功しました
カッコの有無でなんでこんなに違うんだろうと不思議です

740:デフォルトの名無しさん
16/10/19


741:01:04:29.51 ID:OIm1eZAK.net



742:デフォルトの名無しさん
16/10/19 01:12:10.60 cKBmHXZY.net
そんな回りくどい事しなくても>>696で出来んじゃん

743:デフォルトの名無しさん
16/10/19 07:11:53.90 Jbfd2Dlj.net
>>696は一瞬コマンド窓が開くだけで動かなかったのです

744:デフォルトの名無しさん
16/10/19 07:56:59.52 OiCCOICb.net
>>698
2chのバグだろ

書き込み確認画面が出る際、" を使うと、そこで文字列の終了とみなされる。
" を、\" とエスケープすれば、どうかな?

745:デフォルトの名無しさん
16/10/19 12:52:41.93 nMHfZfYD.net
&#34; と文字参照を使って書き込めばいいのでは?
結果として " となるはず。

746:694
16/10/19 13:03:34.54 fhJbq8nW.net
JaneXenoでは特別な事しなくても書き込めた

747:デフォルトの名無しさん
16/10/20 18:11:41.71 fyY9mWCP.net
いっつもStyleで書いてるけど"で切れたことなど一度もないけどなあ

748:デフォルトの名無しさん
16/10/20 18:13:00.13 1rA0OcU3.net
>>687
遅くなってすいません
無事動きました
ありがとうございます

749:デフォルトの名無しさん
16/10/20 19:03:20.93 LBhOxlVJ.net
ダブルクオーテーションで切れるのこれっぽい。
スレリンク(unix板:777番)
自分も確かにこのケースだった。

750:デフォルトの名無しさん
16/11/02 06:03:13.96 CHmLMhVd.net
バッチファイル終了のお知らせ

“Microsoft Flow”が正式公開。さまざまなサービスを組み合わせた自動処理が可能 - 窓の杜
URLリンク(forest.watch.impress.co.jp)

751:デフォルトの名無しさん
16/11/02 06:40:56.27 w2Q1/JQP.net
アイデアは良いと思うが

>さまざまなアプリやサービスを組み合わせた自動処理を作成できるクラウドサービス“Microsoft Flow”を正式公開した。
>“Microsoft Flow”は“○○したら××する”といった一連の手続き(ワークフロー)をビジュアルでデザインし、自動実行できるサービス
>料金は1ユーザー1カ月あたり750回までの実行であれば無料。有償プランであれば実行回数が増える

回数制限で有料とかゴミすぎ

752:デフォルトの名無しさん
16/11/02 09:32:20.20 5fVzD+K5.net
こんなのは華や茶の流派と同じで新しいのがでても統合などされることは無いんだよね

753:デフォルトの名無しさん
16/11/02 23:59:36.62 WEv5cQ3m.net
>>719-720
ワークフローなんか各社から出てるじゃん。

754:デフォルトの名無しさん
16/11/04 00:14:32.57 0ODaAY82.net
そういうのってネットに繋いでない時にも必要なのにクラウドサービスって
しかも有料って

755:デフォルトの名無しさん
16/11/04 01:47:32.80 DvwqGnEZ.net
完全にスタンドアロンで放置して動かすときにクラウドなんて使ってられない

756:デフォルトの名無しさん
16/11/10 06:45:58.93 +oUm9x6Y.net
TidyTabs Window Manager: give every program a tabbed user interface
URLリンク(www.nurgo-software.com)

757:デフォルトの名無しさん
16/11/11 12:54:54.72 ZYU/THNy.net
batファイルをつくりたいのですが、どのようにすればいいでしょうか
全くの初心者なのでヒントが欲しいです

目標としては、

親フォル�


758:_Aの中に、子フォルダ[aaa]あああ、[aaa]いいい、[bbb]ううう があります ①([aaa]あああ)の[ ]内の文字(つまりaaa)を自動で取得し、その名前の新規フォルダを作成。(つまりaaaという名前の新規フォルダ) ②その後、親フォルダA内の[aaa]が入っているフォルダを検索する ③ ②で検索された複数フォルダを①で作成されたフォルダに入れる という流れを自動で行いたいです



759:デフォルトの名無しさん
16/11/11 14:42:02.48 OyxHpcMK.net
>>726
親フォルダを引数で渡すとしての一例
@echo off
pushd %1
for %%i in ([*]*) do (
for /f "tokens=1* delims=[]" %%j in ("%%~i") do >nul 2>&1 (md "%%~j"&move /y "%%~i" "%%~j")
)
popd

760:デフォルトの名無しさん
16/11/11 15:12:14.98 p31+l1cx.net
>>727
最初のforは/dつけないとだめでは

761:デフォルトの名無しさん
16/11/11 15:56:59.78 OyxHpcMK.net
おおー、フォルダだったのか
てっきりファイルだと思い込んでたよ

762:デフォルトの名無しさん
16/11/13 18:37:37.78 cer+jHW2.net
質問させていただきます
初めてバッチファイル、コマンドプロンプトを勉強して作っているのですが、HTMLページから特定のURLを抜き出してバッチファイルに代入したいのですが、その場合はWSH等で抜き出さないと出来ませんでしょうか

763:デフォルトの名無しさん
16/11/13 20:15:27.03 YAp+h9P5.net
>>730
HTMLページって具体的に何?

764:デフォルトの名無しさん
16/11/13 20:16:08.95 vGjlz1Ep.net
そんな大雑把過ぎる質問では最適解など分かるはずもなくレスつかないよ
PowerShell使ったら?

765:デフォルトの名無しさん
16/11/13 20:19:41.15 cer+jHW2.net
>>731
OPENREC.tvという動画サイトです
ここから動画ファイルのURLを吸い出して、エンコソフトをコマンドプロンプトに直接代入したいと思いまして・・・

>>732
すみません、この手の事は不慣れで・・・
PowerShellというものを初めて知りましたので、調べてみます

766:デフォルトの名無しさん
16/11/13 23:00:08.77 BL+CTUiW.net
手段の前にまず手順を具体的に整理して見るといい

要件についてまったく何も知らない他人に
全部手作業でやってもらうよう依頼するとしたらどう説明する?

767:デフォルトの名無しさん
16/11/14 01:02:54.70 csZc9y3a.net
松岡修造みたいにすると思う。

768:デフォルトの名無しさん
16/11/14 13:10:56.92 vvHHVAL2.net
バッチなんて所詮手作業を自動化するだけ

ここでは手作業を自動化するのを支援することは出来るが
手作業で出来ないor内容がわかってない人はどうしようもない

769:デフォルトの名無しさん
16/11/14 14:36:44.38 O1UQmJEN.net
>>733
1.PowerShellで.NETFramework使う
2.PythonやRubyなんかのllを使う
3.C#で簡単プログラミング
さあ選べ

770:デフォルトの名無しさん
16/11/14 15:07:34.34 WHs7zj8I.net
この場合は、バッチファイルにて
htmlを取得して、url文字列を抜き出して、エンコソフトにオプション渡し
ができるのか?、という問いなので、さあ答えは

771:デフォルトの名無しさん
16/11/14 15:27:55.44 bnBDmUvf.net
>>733
そこのサイトは知らんけど
>動画ファイルのURLを吸い出して
なんて書いてるけど今時動画ファイル直リンなんてあるの?手段すら分かってないんじゃない?
この手の技術に明るくないのであれば既存ソフトを用いてUWSCやAHKで自動化が現実的だと思う
rtmpdumpみたいなcuiソフトがそのサイトで使えるならバッチで出来ると思うが

772:デフォルトの名無しさん
16/11/14 15:29:20.63 9SfC86lS.net
動画サイトって普通ストリームじゃないの?
URLからダウンロード、エンコって、まず手作業でどういう手順で行うのか説明してくれないと
wshやPowershellでだって出来るかどうかも答えられないよ

773:デフォルトの名無しさん
16/11/14 19:02:24.4


774:0 ID:GWnO6+Yj.net



775:デフォルトの名無しさん
16/11/14 19:40:40.70 kXxSR+Dw.net
>>741
人に聞くならまず正しい日本語で頼む

> 今までは動画ページからm3u8形式の格納されてるURLをソースから引っ張ってきて

君には動画ページとかソースが何者かがわかってるんだろうけど、他の人にはそれが何者なのか?どこから与えられるのか?とか全然わからない

776:デフォルトの名無しさん
16/11/14 20:28:41.10 8ZP1uHGR.net
>>741
その動画サイトとやらを教えられない理由があるなら
先に説明しておく方が親切だよ

777:デフォルトの名無しさん
16/11/14 20:35:09.15 GWnO6+Yj.net
>>733でも書いた通り、openrec.tvというサイトです
動画ページはどこを見ても同じソースだと思うので深く考えず、URLを載せなかっただけですがやはり載せた方がよろしいでしょうか?

divタグ内に変数で各情報が載っておりますが、そこは重要ではなく>>738が仰ってる通りです

778:デフォルトの名無しさん
16/11/14 20:51:56.98 sZZGpXNZ.net
>>741
普段使いのcURLというCUIなダウンローダーで試した、使いたいツールがあるならお好みでどぞ
URLリンク(curl.haxx.se)
URLリンク(bintray.com)
Win32 - GenericにあるSSL, SSH対応版ね

前提として、外部ツールの検索パスは設定済みとする
バッチファイルの引数としてURLをひとつ渡す。例: batchfile.bat URLリンク(www.openrec.tv)
ここから
@echo on
setlocal ENABLEEXTENSIONS
cd /D %~dp0

@rem 引数有無と引数名チェック
if "%~1"=="" goto ERROR
echo;%1|findstr /R /C:"^http" /C:"openrec" >NUL||(echo "%1" を処理できません) && goto ERROR

@rem URLのアドレスとHTMLを環境変数へ設定
set ADDR=%1
for %%I in (%1) do set HTML=%%~nxI

@rem HTMLダウンロード
curl -L --max-redirs 10 -R -O %ADDR%

@rem HTMLから文字列抽出
for /F "tokens=2 delims=<>| " %%I in ('type %HTML%^|findstr /R /C:"<title>"') do set TITLE=%%~I
for /F "tokens=2 delims=, " %%I in ('type %HTML%^|find /I "m3u8"') do set TARGET=%%~I

echo ffmpeg -c copy "%TITLE%.ts" -i "%TARGET%"
pause
exit
ここまで

779:デフォルトの名無しさん
16/11/14 20:56:46.40 sZZGpXNZ.net
すまそ、goto先がすっぽ抜けてた

中略
echo ffmpeg -c copy "%TITLE%.ts" -i "%TARGET%"
pause
exit

:ERROR
echo 引数が無効のため処理できませんでした
pause
exit
ここまで

780:デフォルトの名無しさん
16/11/14 21:08:57.72 nGSer73d.net
curlってすごく便利なコマンドがあったね
連番ファイルとか今までperlやbashでスクリプト書いてたのがアホらしい

781:デフォルトの名無しさん
16/11/14 21:15:57.14 sZZGpXNZ.net
>>745
追伸、安全対策としてcurl処理のすぐ下に条件分岐も追加しておいてほしい

@rem HTMLダウンロード
curl -L --max-redirs 10 -R -O %ADDR%
if not %ERRORLEVEL%==0


782:goto ERROR



783:デフォルトの名無しさん
16/11/14 21:28:24.00 GWnO6+Yj.net
おお、サンクスです・・・

が、一つわがままを言わせてもらうとやっぱり外部バイナリなりを使わないと出来ないですか・・・
どのPCでもすぐに使えるようにしておくと楽だなーと思ったのがきっかけだったので・・・

784:デフォルトの名無しさん
16/11/14 21:35:57.24 4gwDzXsT.net
そもそもffmpeg使う時点で外部バイナリ必須では?
それでも外部バイナリに頼らないでhttpダウンロードしたいっていうのなら
bitsadmin /transferって手がなくはないけど

785:デフォルトの名無しさん
16/11/14 21:37:40.26 sZZGpXNZ.net
>>749
bitsadmin.exe があるけど、拡張子がないサイトだと無理っぽかった、俺環かもだが
試してダメだったためcurlに書き換えた

786:デフォルトの名無しさん
16/11/14 21:38:23.41 GWnO6+Yj.net
なんというか、インストール不要であるのが理想的だなと・・・
それで、一時はWSHでjavascriptでHMTLをダウンロードしようかと考えていました

787:デフォルトの名無しさん
16/11/14 21:58:48.06 4gwDzXsT.net
>>751
それは知らなかった
そうすると後はPowerShellとか
powershell -C "$h = Invoke-WebRequest URLリンク(example.com;) $h.Content"

788:デフォルトの名無しさん
16/11/15 08:29:35.25 bLa91iv6.net
vbsでhttpすればいいんじゃね

789:デフォルトの名無しさん
16/11/16 04:24:03.14 tgJZOdTt.net
dir /ad /b /s "abc"
サブディレクトリ含め"abc"フォルダのパスを列挙したかったんだけど
子に"abc"がある時と無い時で挙動が全く変わる
子に"abc"が無ければ望み通りの結果になるけど
子に"abc"があるとそこで dir /ad /b /s されて全てのディレクトリが列挙される
"*abc"だと"zabc"も出て来るし
"*\abc"や"C:\TEST\*\abc"は構文error
if exist "abc" で例外処理しないとダメ?
何かサクッと出来る方法があるならお願いします

790:デフォルトの名無しさん
16/11/16 05:28:34.82 g04DIhTd.net
"\abc"

791:デフォルトの名無しさん
16/11/16 06:28:47.52 tgJZOdTt.net
>>756
それやると何故かカレントディレクトリは C:\TESTなのに (echo %cd% で確認)
ドライブ全体から検索してるのか C:\Users や C:\Program Files 配下の abcディレクトリまで表示されるんだけど Win10

792:デフォルトの名無しさん
16/11/16 09:56:14.36 l4m+U27H.net
こういうこと?
dir /ad /s /b | findstr /r \abc$

793:デフォルトの名無しさん
16/11/16 16:58:26.02 tgJZOdTt.net
>>758
dir /ad /b /s | findstr /r "\\abc$"
これで行けそうかな。ありがとう


/s スイッチの時フルパスで無ければ強制的にディレクトリ名orファイル名と見做してくれればいいのに
子にあると対象パスの省略形と見なし、無ければ検索するディレクトリ&ファイル名になるとか罠もいいところだわ
dir /ad /b /s "\abc"
これだとカレントディレクトリが無視されてドライブ全体?からabcフォルダが検索されるんだけど理由が分かる人が居たら教えて下さい

794:デフォルトの名無しさん
16/11/16 19:53:01.57 G/QgDslQ.net
>>759

for /r %%i in (.) do if "%%~nxi" == "abc" echo "%%~fi"

\abc みたいに先頭に \ があるとそれはルートを示すんだよ
DOS の頃から同じ仕様なんだけど

795:デフォルトの名無しさん
16/11/16 20:29:10.66 G/QgDslQ.net
>>760

ABC とか Abc とか abC とか有ったら /i を追加

for /r %%i in (.) do if /i "%%~nxi" == "abc" echo "%%~fi"

796:デフォルトの名無しさん
16/11/16 20:36:19.30 tgJZOdTt.net
dir /ad /b /s | findstr /r "\\%name%$"
てな場合nameの末尾にスペースが入ると意図した結果にならず
dir /ad /b /s | findstr /e "\%name%" で解決出来ました

>>759
for /r とif での方が間違いが無さそうですね。ありがとう
"\abc" は、まず dir /ad /b /s "C:\abc" とドライブ省略形の対象ディレクトリと見做して
対象が無ければ検索するディレクトリ名&ファイル名として扱われている感じなのかな

797:デフォルトの名無しさん
16/11/16 22:35:57.05 fww2Eit8.net
いままでdir /sのディレクトリ指定は開始位置を指定するもんだとばかり思ってたけど違うんだな
指定ディレクトリが存在してたらこの通りで他のディレクトリの下は対象外なんだが
存在しないと他のディレクトリの下へ探しにいくんだな
気をつけないといけないな

実行速度は遅いだろうが
forfiles -s -mabc -c"cmd /c if @ISDIR==TRUE echo @PATH\@FILE"

798:デフォルトの名無しさん
16/11/17 01:33:10.64 45hMt1B7.net
>>759
dir .\abc /ad /b /s
カレント配下ならドット付けとくんじゃないの

799:デフォルトの名無しさん
16/11/17 01:41:34.94 3AVvQ2An.net
DOS/Windowsでは、単にabcとするのが普通で.\abcとは書かないかな

800:デフォルトの名無しさん
16/11/18 00:23:10.73 MVrqW6/3.net
さらに複数パターンの一致を検出してみる

for /r /d %%i in ("abc.*" "xyz.*") do if "%%~xi"=="" echo "%%~fi"

801:デフォルトの名無しさん
16/11/18 05:45:03.27 aprTvklx.net
>>765
は?

802:デフォルトの名無しさん
16/11/18 07:12:41.73 MVrqW6/3.net
フォルダに拡張子が無いとしたら
dir /ad /b /s abc.*
で良さそう

803:デフォルトの名無しさん
16/11/18 15:43:00.69 MssNdFsD.net
>>766
>>768
"abc.*"だと"abc."が最低条件になって"abc"は除外されるものだと思ってたけど"abc"も出てくるね
実際は末尾"."のフォルダは作れないから拡張子の付いているフォルダしか出ないと思ってた
なんで???"."て特殊なの?ちょっと目からウロコ

804:デフォルトの名無しさん
16/11/18 16:29:03.81 TqE/rt71.net
もともとドットは拡張子の区切り記号だったわけで
abc. = abc
Windowsになって複数のドットも付けられるようになったが
ドット2つ使うとファイル管理領域も2倍使う結果に

805:デフォルトの名無しさん
16/11/18 16:44:12.24 MssNdFsD.net
拡張子の区切り記号なのは分かるけどそれが
abc.==abc
となる理由が分からない
ドットが区切り記号だからファイル名(文字列)と見做さず比較の際に無視されるとかなのかな?

806:デフォルトの名無しさん
16/11/18 16:52:38.55 TqE/rt71.net
ファイル管理領域は、ファイル名部分と拡張子部分とに分かれており
ドットはその管理領域のどこにも書き込まれない
単に区分けする識別子の役割りしか持たない
つまり、管理上は、ファイル名=abc,拡張子=NULLってなってる
だからabc.とabcの見分けは付かない
エクスプローラでファイルをabc.で作成したってabcファイルが作られるだけ

807:デフォルトの名無しさん
16/11/18 17:06:48.25 TqE/rt71.net
なんか勘違いしてた気がする
LFNではドットもそのまま入ってる

808:デフォルトの名無しさん
16/11/18 17:12:57.12 MssNdFsD.net
>>772
>ドットはその管理領域のどこにも書き込まれない
>管理上は、ファイル名=abc,拡張子=NULL
>だからabc.とabcの見分けは付かない
詳しい説明をありがとうございます
納得出来ました。もうなんと言って良いのやら
ひとつ理解が深まりました。ドラクエのレベルアップの音が鳴り響いた気分です

809:デフォルトの名無しさん
16/11/18 17:24:08.15 MssNdFsD.net
コマンド側が古い仕様を引き摺ってると判断しておきます

810:デフォルトの名無しさん
16/11/18 18:07:23.95 TqE/rt71.net
おそらくコマンドやエクスプローラは、最後のドットに特別な意味(拡張子)を持たせて
ドットだけなら削除する仕様なんだろう

811:デフォルトの名無しさん
16/11/18 21:00:10.73 TqE/rt71.net
ピリオドと半角空白には色々と罠があるかも
md aaa
cd "aaa....."
md "abc. . . " (エクスプローラでのフォルダ・ファイル作成も同じ)
dir "abc.."
dir "abc..."(abc..とは異なる結果に)

812:デフォルトの名無しさん
16/11/19 03:25:52.98 JjiTnU56.net
#!/bin/bash
# すれ違いですまないが

apt-get moo #に見えてきた

echo "Enter to Exit"
read wait

813:デフォルトの名無しさん
16/11/19 04:02:30.76 6BFx2XsN.net
すれ違い杉

814:デフォルトの名無しさん
16/11/19 10:40:41.73 I/7/X0k0.net
 ケイン


815:・コスギ  英才・出木杉  ・・・・板違い



816:デフォルトの名無しさん
16/11/19 11:47:06.46 HaGDkE41.net
>>772-773
合ってるよ
短い名前(いわゆる 8.3形式)ではカレントディレクトリの "." と ".." を除いて "." は記録されない
URLリンク(ja.m.wikipedia.org)
LFN ではそのまま Unicode で記録される

817:デフォルトの名無しさん
16/11/20 01:32:41.69 5hQ1kNDg.net
%random% って代入すると機能を失って、クリアするとまた復活するのね。
一時変数の名前に使うとちょっと便利かも

818:デフォルトの名無しさん
16/11/20 08:06:59.15 plO26YRe.net
777

819:デフォルトの名無しさん
16/11/20 22:07:31.97 mYrLDeuJ.net
>>782
バグの元だろ

820:デフォルトの名無しさん
16/11/21 02:59:43.79 bNk8tUAy.net
%errorlevel%とか%date%に代入するとかもやりそうな気配

821:デフォルトの名無しさん
16/11/21 18:40:20.55 1UsqdqxT.net
win10が時期アプデでコマンドラインシェルをデフォルトから格下げだってさ。えらいこっちゃ

fossBytesに11月19日(米国時間)に掲載された記事「Microsoft Replaces Command Prompt
With PowerShell As Windows 10 Default Shell」が、Windows 10のデフォルトシェルが
コマンドプロンプトからPowerShellに変更されると伝えた。Windows 10 Insider Build 14971で
すでに入れ替えが実施されたと説明がある。

Windows 10 Insider Build 14971では、これ以外にもMicrosoft EdgeでEPUB電子ブックを読む
機能や新しいPaint 3Dアプリケーションの導入などが実施されている。

(後略)
URLリンク(news.mynavi.jp)

822:デフォルトの名無しさん
16/11/21 19:58:33.06 4eyhD8wV.net
>>786
まあそろそろいいかなって思うわ
慣れれば PowerShell めっちゃ便利やし

823:デフォルトの名無しさん
16/11/22 16:32:55.50 OivDuOyC.net
>>785
おもしろい、どうなるのだろう

824:デフォルトの名無しさん
16/11/23 04:53:34.68 lMEr/SWa.net
%参照は上書きの値、if errorlevel文には set errorlevelしても無効
set errorlevel=5 などバッチ内で errorlevelを自分で設定する場合は if errorlevel文は使えない
if %errorlevel% GEQ 1 などであれば可

825:デフォルトの名無しさん
16/11/23 09:54:12.77 pZmHnyz7.net
WindowsPEも起動したらPowershellで始まるの?
最新のヤツでもマトモに動かせないのに

826:デフォルトの名無しさん
16/11/24 00:02:10.88 b21vlpof.net
>>727>>728
ありがとうございます
返信遅くなりました

ただ、せっかくヒントを頂いたのですが、想像より自身のレベルに見合わないスクリプトでした。実際につくるのは先になりそうです……

827:デフォルトの名無しさん
16/11/24 00:50:33.49 aisAFXaT.net
>>791
>>727-728 はヒントじゃなくて720の要件の全部だぞ
721をbatで保存してそのbatに親フォルダAをドロップすれば720の通りになる

828:デフォルトの名無しさん
16/11/26 00:47:02.26 61EwoExF.net
>>727>>728>>792
ありがとうございます!できました
>>728の方が言っていた直しが正しく行えなかっただけでした
皆さん本当にありがとうございます

自分で書けるようにもなりたいのですが、皆さんどのようにバッチファイルを学んだのでしょうか
サイトなどを回ってもなかなか進まなくて……

829:デフォルトの名無しさん
16/11/26 02:10:39.28 CoCq2KiG.net
for /?
set /?
この二つ読んでわからないところをぐぐる

830:デフォルトの名無しさん
16/11/26 04:48:01.93 0eLSGHGV.net
「バッチ �


831:�門」でググって出て来るページを読む コマンド一覧を載せてるサイトを見てどんなコマンドがあるのか一通り目を通す(暗記までする必要なし) /?でヘルプ見ながら書いて一つ一つ試す pauseを挟みつつ期待した通りに動いてるか確認しながら書いていく 分からなければここで質問 自分の場合、リダイレクトとかエスケープとかcall set で遅延環境変数を使わない方法とかはここで教わった 何をやっているのか分からないものは必ず解読するようにすれば覚えていける 動作を理解していないとテストでは問題無く動いても本番でエラーになる事もあるからファイル操作させたりする場合は予めバックアップを取る 処理対象が大量にある場合などは1度に全てを処理せず何度かに分ける 721で難しそうなのはforのみ 最初のforで対象フォルダ("[*]*"にマッチするもの)を抽出してる for /d %%i in ([*]*) do echo %%i と分解してみれば分かりやすい for /f "tokens=1* delims=[]" %%j in ("%%~i") do delims=[] は "[" "]" の文字を区切り文字に指定 tokens=1* は1つ目のトークンを%%jに残りを%%kに "[aaa]あああ"であれば %%jに"aaa"が %%kに"あああ"が入る md "%%~j"&move /y "%%~i" "%%~j" フォルダ作成&移動 "[]あああ"なんてのがあると想定していない"あああ"フォルダに移動になるから注意ね



832:デフォルトの名無しさん
16/11/27 09:52:07.02 mLcTWF4w.net
おはようございます。
同一フォルダ内にある複数ファイル
a.jpg、あ.jpg、1.jpg等を一括で001-a.jpg、002-あ.jpg、003-1.jpgに連番を付加する
batファイルを教えて下さい!

833:デフォルトの名無しさん
16/11/27 11:17:31.27 2v7FHJZn.net
a,あ,1の順序付けにどういう規則をつけるの?
普通の昇順降順ではこの順番にならないけど

834:デフォルトの名無しさん
16/11/27 11:19:13.96 mLcTWF4w.net
紛らわしくてすいません。
普通の昇降順でお願いします。

835:デフォルトの名無しさん
16/11/27 11:33:53.80 2v7FHJZn.net
こういうのって結構難しいんだよね
例えば、
a.jpgと001-a.jpgの二つのファイルがあったら
先に001-a.jpgをリネームして001-001-a.jpgにしないと
ファイル名が重複してリネームできなくなるし
(さらに001-001-001-a.jpgがあったりすると...)

836:デフォルトの名無しさん
16/11/27 11:57:08.03 mLcTWF4w.net
単純に今あるファイル名の先頭に001や002と連番をつけるだけで大丈夫です。
この前作ったのですが誤ってファイルを消してしまって(泣

837:デフォルトの名無しさん
16/11/27 12:22:44.82 2v7FHJZn.net
>>800
正常系だけでいいのなら
@echo off
pushd %1
set n=0
for /f "delims=" %%i in ('dir /b /on *.jpg') do (
set /a n+=1
call set nn=00%%n%%
call set nn=%%nn:~-3%%
call ren "%%~i" %%nn%%-"%%~i"
)
popd

838:デフォルトの名無しさん
16/11/27 12:47:37.07 3PyehhaB.net
作成代行スレじゃないので自力でここまではできたけどここから先がわからない
というような努力の跡がほしいなぁ

839:デフォルトの名無しさん
16/11/27 15:20:44.02 V1m99hal.net
@echo off
pushd "%~dp1"
set n=1001
:ARGCHK
if "%~1"=="" pause &exit /b
ren "%~1" "%n:~-3%-%~nx1"
echo.
echo "%~nx1"
echo "%n:~-3%-%~nx1"
set /a n+=1
shift &goto :ARGCHK


選択ファイルを送るやバッチにD&D。001から999まで
Winの仕様によりD&Dの際は先頭ファイルを掴まないと順番が狂うので注意

840:デフォルトの名無しさん
16/12/04 12:46:34.73 RTx2BH8+.net
>>794>>799
ありがとうございます!返信遅くなりました
とくに799の方、具体的に話していただいて本当に助かりました。

841:デフォルトの名無しさん
16/12/04 16:10:49.30 J7/x1rKh.net
799

842:デフォルトの名無しさん
16/12/04 19:03:21.48 rwQpbrj5.net
799は素晴らしいな

843:デフォルトの名無しさん
16/12/10 00:17:50.34 CO5JTr10.net
pushd "%~dp1" || exit /b
if not exist "title.txt" exit /b
for /f "usebackq delims=" %%a in ("title.txt") do (
ren "%~1" "%%~a%~x1"
shift
)

forの中でshiftが働きません
どう書けば良いでしょうか?
選択ファイルをドラッグ&ドロップしてtitle.txtの順通りにリネームしたいです

844:801
16/12/10 14:16:28.41 CO5JTr10.net
自己解決しました
@echo off
pushd "%~dp1" || exit /b
if not exist "title.txt" exit /b
:LOOP
if "%~1"=="" pause &exit /b
for /f "usebackq %SKIP%%N% delims=" %%a in ("title.txt") do (
ren "%~1" "%%~a%~x1" || (echo "%~1" "%%~a%~x1"&pause &exit /b)
goto :NEXT
)
:NEXT
if not defined SKIP set SKIP=skip=
set /a N+=1
shift &goto :LOOP

845:デフォルトの名無しさん
16/12/10 15:09:17.17 ga5ibtHW.net
forループは実行前に式展開されてから実行されるので
式展開時に変数が内容の文字列に置き換わってしまい変数の意味を失う
@echo offを取って表示させたらわかるだろう
面倒なのでヒントだけ
for %%a ~ do (
set b=%%a
call echo %%a - "%%~1" - %%b%%
shift
)

846:デフォルトの名無しさん
16/12/10 16:20:43.39 CO5JTr10.net
>>809
ありがとうございます
callで遅延展開風にする場合%で囲むと思っていたので
call ren "%%~1%" "%%~a%%~x1%" と書いていて出来ませんでした
call ren "%%~1" "%%~a%%~x1" と書けば良かったのですね
%で囲むではなく「%を重ねる」と覚えるようにします

847:デフォルトの名無しさん
16/12/10 16:27:31.21 ga5ibtHW.net
式評価されるということは、
%%→%になるっていうことなんだよ
(これは%を表記する方法として覚えるけど)
set a=echo hoge
call %%a%%
call call %%%%a%%%%

848:デフォルトの名無しさん
16/12/11 10:51:05.79 HwfbXu/f.net
>>810
引数や変数を遅延展開するのは無理あるよ
あらかじめ環境変数をセットしたものが対象であり、どのコマンドにも適用できるわけじゃない
パーセントを前方に重ねるのはバッチ上の書式、一重囲みが環境変数、call command 二重囲みが遅延展開というように意味が異なる
よくわからなければエクスクラメーション記号にするか、カッコを使った複文を避けてサブルーチンに渡す、など別の方法をとる

849:デフォルトの名無しさん
16/12/11 15:29:30.80 wBKcLq5q.net
遅延展開というより
式評価が、実行時とcallの2回実施される
一回目の式評価ではまだ変数展開が行われずに残ったままにしたい
ってのが%%にする理由

850:デフォルトの名無しさん
16/12/11 15:39:49.38 wBKcLq5q.net
for /F %%i in ('command')
形式の'command'の部分、ここにも式評価が入ることが結構忘れられる

851:デフォルトの名無しさん
16/12/11 16:35:43.66 wBKcLq5q.net
補足
commandにパイプやリダイレクト記号を書くような場合は
^| や ^>とかのように'^'を付けないとエラーになるから忘れるということは無いだろうが
忘れる場合ってのは、>>523>>538のような場合のことで
元のように%一つにしておくと何が起き得るかは"ab%cd%ef"とかが入ってる場合を考えれば解かる

852:デフォルトの名無しさん
16/12/11 22:14:02.08 iHWHaBgd.net
\/:*?"<>|
テキストファイルに含まれるこれらのファイル名に使えない文字を全角文字に置換したいのですが
バッチで試してみたところ"*は無理でした
バッチから使えるcuiソフトなどで良いものや何か方法があれば教えて下さい

あ/あ "abc"
など括弧のように対応する"がある場合は、あ/あ “abc”
あ/あ a"
など対応するものが無ければ、あ/あ a”
みたいに出来れば理想です

853:デフォルトの名無しさん
16/12/11 22:19:57.19 iHWHaBgd.net
あ/あ “abc”
が何か分かり難くなってますが
左側が左ダブル引用符という下から上へコロン打ってるやつで
右側が右ダブル引用符で上から下へのコロンです

854:デフォルトの名無しさん
16/12/14 00:05:22.68 vS/jNHEE.net
netstat みたいに気軽で、もっと高速にアクセス中のホストが分かる方法ないでしょうか?
というのは、EdgeのURLを取得するのはかなり面倒なので
でも netstat の情報は1分以上遅延するので、できれば数秒で知りたい

855:デフォルトの名無しさん
16/12/14 00:51:13.45 /GnWlzD4.net
>>818
netstatそんなに遅れるか?
名前解決に時間が掛かってるんなら-nを付けて数値のみで表示させてみては?

856:デフォルトの名無しさん
16/12/14 01:19:09.19 vS/jNHEE.net
>>819
なるほど、-nなら一瞬でしたw
名前で反応したかったので、-fにしてました

857:デフォルトの名無しさん
16/12/14 01:31:44.57 /GnWlzD4.net
セッション数幾つぐらいなのか知らないけど
普通名前解決に秒単位なんてかからないよ
自分のプロバイダのところのDNSサーバー使ってるか?

858:デフォルトの名無しさん
16/12/14 01:54:27.20 vS/jNHEE.net
>>821
特に何もしてないので、プロバイダのDNSだと思います
普段は4つですが、ブラウザ開くと1ページでも何十個も出てきますね
よく見ると、一瞬で何十個もリストアップされる場面と、ひっかかる場面があって、相手先によるようですね

859:デフォルトの名無しさん
16/12/14 03:29:46.39 PdV20HuV.net
>>816-817
ファイル名には、半角英数字と、_ アンダーバーだけを使うこと

バグるアプリがあるから、それら以外の文字は使うな

860:デフォルトの名無しさん
16/12/14 04:28:14.68 /GnWlzD4.net
まあ今時ファイル名に日本語を使うなってのはちょっと無理っぽいだろ
良いものがあるかどうかは俺は知らんよ(人に探させずに自分で探すのがいいだろう)
PowerShellやWSHでやる分にはそれくらいは出来るだろうけど
ファイル名にはいろいろ落とし穴があるからなあ
長さ制限とか、con,com1等のデバイス名とか後につくピリオドや半角空白とか
com1. ..txt
とか作れない

861:デフォルトの名無しさん
16/12/14 17:45:01.83 vFnJFYnV.net
コマンドラインから「システムの環境変数」を参照するのってできる?

具体的には最近のJavaインストールすると、
システムの環境変数PATHの先頭に余計なもの追加しやがるので
それを削除するスクリプト書きたいんだよね。
設定は setx 使えばいいらしいんで、参照さえできれば削除できるかなーと。

862:デフォルトの名無しさん
16/12/14 17:55:14.06 puNU7ctc.net
reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment"
個人的には reg export 使ってファイルでごにょるのが好み

863:デフォルトの名無しさん
16/12/14 21:30:56.66 PdV20HuV.net
PowerShell_ise では、大文字・小文字は同一として扱われる。
環境変数PATHを表示する
$Env:Path

設定は、
$str = ";C:\Program Files\Internet Explorer\"
set-item -path env:path -value "$Env:Path + $str" -WhatIf

-WhatIf を付けているので、実際には実行されないで、結果を見れる

864:デフォルトの名無しさん
16/12/14 23:47:39.26 vFnJFYnV.net
>>826
さんくす

865:デフォルトの名無しさん
16/12/15 22:24:24.35 Jry/Bq76.net
このスレってやっぱり仕事でCMD使ってる人がほとんどなのかな?

866:デフォルトの名無しさん
16/12/15 23:46:26.73 Jj9qQdSY.net
余裕で趣味です

867:デフォルトの名無しさん
16/12/16 00:25:58.77 EPzN1wXR.net
今もバッチで色々やってるけど
そろそろPowershell覚えた方がいいんかナー

868:デフォルトの名無しさん
16/12/16 03:59:28.83 rja7Rz9P.net
かなり前からそう思ってるけど.Net覚えるのが面倒臭くて先延ばしにしたままだわ

869:デフォルトの名無しさん
16/12/16 19:20:13.39 UvIhWraO.net
少し前から cmd/wsh+vbs から PowerShell に


870:移行したけどチョー楽しい ただ各所にトリッキーなトラップがあるのと比較演算子が -eq とか -lt とかなのがいまだに慣れない



871:デフォルトの名無しさん
16/12/17 20:01:48.32 rAxcOYFz.net
キッティングで使ってるけど
PowerShellはストアアプリの駆除がメインだな

872:デフォルトの名無しさん
16/12/18 08:18:40.79 qKtu6SDf.net
シェルスクリプトはリダイレクトに > | < 使ったアホのせいで
比較演算子がまともに使えなくなったのが痛い
PowerShellではその悪習を断ち切って欲しかった

873:デフォルトの名無しさん
16/12/18 11:49:41.76 djwC/Ohb.net
リダイレクトに<>を使ったのは大成功だったと思うがな。
PowerShellでヘンテコな構文を導入したところで、
マイクソシネって言われるだけじゃん。

悪臭というなら、パス区切り文字の\だろ。

874:デフォルトの名無しさん
16/12/18 15:58:05.60 oHmdKz4q.net
[]も問題起こすよね

875:デフォルトの名無しさん
16/12/18 16:00:06.55 oHmdKz4q.net
なんか四角形に見えるw
『 [ 』と『 ] 』ね。

876:デフォルトの名無しさん
16/12/19 12:20:52.68 H16UOEk6.net
豆腐屋って減ったよなあ

877:デフォルトの名無しさん
16/12/19 21:24:30.96 j5IwDTpi.net
峠を攻める豆腐屋

878:デフォルトの名無しさん
16/12/19 22:09:00.93 EFgj4hJx.net
というよりも小売りが…
八百屋なんて、そういうのがネタになっている商店街か、
近くに田畑があるようなところでしか見なくなったよ。
ほとんど全ての街ではスーパーでいいからな。

そう考えると、花屋は頑張っている。
未だにそれなりの数が残っているよな。
ま、スーパーの置き場所は限られているからか。
あとは客ひとりの利益率も悪くないんだろうなあ。

879:デフォルトの名無しさん
16/12/23 13:16:48.65 C13rqdFY.net
自身にマウントされてるドライブ/フォルダ名を指定してその対象がローカルドライブか否か判別できるコマンドってありますか?

880:デフォルトの名無しさん
16/12/23 13:19:26.61 C13rqdFY.net
あれ、なんか投稿が切れてる・・・

自身にマウントされてるドライブ/フォルダ名を指定してその対象がローカルドライブか否か判別できるコマンドってありますか?
『net use ドライブレター』でCIFS/WebDAVでマウントされた物かそうでないかは判断できるけど、
Dokanとかでマウントされた物も含めて、ネットワークドライブ全般を判別したいです。
(ただiSCSI/FCとかのブロックデバイスは仕方ないかなと思ってます)
よろしくお願いします。

881:デフォルトの名無しさん
16/12/23 20:54:24.61 QxIckOqH.net
>>843
俺は以下の要領でVBScriptと併用してる

スレリンク(tech板:587番)
>593 : デフォルトの名無しさん[sage] 投稿日:2014/06/16(月) 18:45:29.61 ID:R0cE173n [1/1回]
>>>592
> WScript.Echo CStr(CreateObject("Scripting.FileSystemObject").GetDrive(WScript.Arguments(0)).DriveType)
> ↑
>この1行をVBScriptファイルとして保存してから別途呼び出す方式にすれば、大雑把な判定なら可能。
>例えば、そのVBScriptファイルを"test.vbs"としてDドライブの種別を調べたい場合、
>コマンドプロンプト画面またはバッチファイルで以下のように実行してみる。
>cscript test.vbs d:

>すると1桁の数字が表示される。数字の意味は以下の通り。
> 1:リムーバブルドライブ(USBメモリ/SDカード/FDなど)
> 2:HDD
> 3:ネットワークドライブ
> 4:CD-ROM/CD-R/DVD-ROM/DVD-Rなど
> 5:RAMディスク

882:837
16/12/23 22:21:21.24 l7ZH


883:1QCK.net



884:デフォルトの名無しさん
16/12/23 23:59:30.85 QxIckOqH.net
>>845
あとは URLリンク(technet.microsoft.com) あたりで、他に使えそうな構文がないかどうか探すしかないのでは?
ちなみに以下の1行をVBScriptファイルとして保存してから別途呼び出す方式にすれば、任意のドライブにメディアが挿入されているかどうかを判定可能。

WScript.Echo CStr(CreateObject("Scripting.FileSystemObject").GetDrive(WScript.Arguments(0)).IsReady)

885:837
16/12/24 08:36:33.47 bGXjBeNc.net
>>846
ありがとうございます。
こちらのツールも勝手がよさそうですね。使わせていただきます。

886:デフォルトの名無しさん
16/12/24 12:05:37.82 mYH1sKhw.net
WSH等を使う…と言ってたらバッチの出番が無くなったりしてな

887:デフォルトの名無しさん
16/12/27 22:52:31.05 tD8K2H9A.net
errorleveになぜか9009が急に出はじめて
びっくりして検索したら、いろいろ出た

888:デフォルトの名無しさん
17/01/02 07:34:29.54 Jfm6LKzZ.net
msys等のprintf をプロンプトから forループ、変数 %s で実行すると困る、って夢を見たんだ

@for /d %s in ("%ProgramFiles%\M*") do @printf """%"s""" %"s"\n" "%s" "%s"

(´-`).。oO(ワケワカラン… もう一回寝たら何かひらめくかな…)

889:デフォルトの名無しさん
17/01/07 01:17:44.86 mJLtkeqF.net
URLリンク(pastebin.com)
こんな感じでmp4からpng形式で切り抜きたいのですが、出来ません
お願いします

890:デフォルトの名無しさん
17/01/07 01:42:13.02 QYFKEjsV.net
>>851
FILENAMEを%で囲ってないからでは

891:通りすがり
17/01/07 09:57:36.05 YuFs6plI.net
FILENAMEを、%で囲めば、いいのか。
φ(..)メモメモ。

892:デフォルトの名無しさん
17/01/08 00:48:03.49 jXHP++jg.net
>>852
ありがとうございます

FILENAME=hoge hage
としたい場合はどの様にしたらいいんですかね?
どこをダブルクォーテーションで囲めばいいのか分からなくて

893:デフォルトの名無しさん
17/01/08 01:06:14.31 xvjZF4HS.net
set文は引用符要らないでしょ、右辺丸々空白ごと代入される(引用符で括れば引用符ごと)
使用する状況によって "%var%" とかすれば

894:デフォルトの名無しさん
17/01/09 12:41:03.48 XllxQEeD.net
set文の最後の改行前や=の前後に空白入れてしまってバグになるなんて
初心者にはありがちか…な?

895:デフォルトの名無しさん
17/01/09 17:39:58.40 FdW16b/b.net
>>856
うん

896:デフォルトの名無しさん
17/01/09 17:46:32.39 Vl0ZF+DQ.net
>>856
こんな感じのが動かなくてなんでじゃーってなってた

@echo off
set number=1 && echo hoge
if "%number%"=="1" echo 成功
pause

897:デフォルトの名無しさん
17/01/21 18:44:36.79 tXmcovE0.net
スペース有り無しはホント罠
ファイルに出力リダイレクトする時も末尾に謎スペースが入ってるーとかよくある

vbsって別ファイルじゃなくてバッチ上に書いた文で実行できなかったっけ

898:デフォルトの名無しさん
17/01/21 18:57:14.10 0ZiC2kwV.net
jscriptなら

899:デフォルトの名無しさん
17/01/23 20:40:05.68 D7Cv/vEJ.net
バッチ処理で複数の作業を同時にするのはどうやるんでしょうか?
hoge 1-


900:100まで一気にやってしまうと負荷がひどいので、3つずつ走らせたいです FOR /F %%I IN (z,txt) do ( start /b hoge %%I ) これではすべて同時に実行されて困ってます



901:デフォルトの名無しさん
17/01/23 20:47:18.46 KnzUZKpX.net
>>861
取りあえず3つ起動して、それが終了するのを監視するとかかな
tasklist /fi "IMAGENAME eq hoge"
が無くなるまで次の起動を待つ

902:デフォルトの名無しさん
17/01/23 21:25:20.02 ltIH4vtA.net
同じ事で悩んだ記憶がある、こんなん如何でしょ?


FOR /F %%I IN (z,txt) do (
start /b hoge %%I
call :hogecounter
)
goto :EOF

:hogecounter
set /a num_hoge = 0
for /f "usebackq" %%i in (`tasklist /FI "IMAGENAME eq hoge.exe"`) do set /a num_hoge += 1
if %num_hoge% GEQ 5 (
echo hoge.exe 3つ以上実行中なので待機中... ---- %date% %time% ----
ping -n 2 127.0.0.1 1>nul 2>&1
goto hogecounter
)
exit/b

903:デフォルトの名無しさん
17/01/24 12:56:00.44 wPNJq+TP.net
>>862-863
回答ありがとうございます。とても勉強になりました
tasklistを使ってどうやって監視するのか考えていたんですが、こうやるんですね

904:デフォルトの名無しさん
17/01/24 20:29:53.92 /B8f83m4.net
startコマンドの第一引数はウィンドウタイトルと認識されるから、/b の効果は不明だね
start

905:デフォルトの名無しさん
17/01/24 20:30:49.14 /B8f83m4.net
start "" /b hoge %%I みたいに空文字でも入れておくといいかも

906:デフォルトの名無しさん
17/01/24 23:59:56.75 VxYK/9Zb.net
処理の終了を知らせるために
rundll32 user32.dll,MessageBeep
としてるんですが、鳴る音がランダムです

音楽プレイヤーを起動することなく特定の音を鳴らしたい場合はどう書けばいいですか?

907:デフォルトの名無しさん
17/01/25 08:04:52.52 JylBc2Qw.net
>>867
もし俺なら以下のようにする。

echo ^G^G^G

「^G」は実際にはコマンドプロンプト画面上で[Ctrl]と[G]を同時に押す事で入力できるアスキーコード7
(元々BEEP音を鳴らすための制御コード)を指す。だから「^G^G^G」なら、BEEP音が「ピッピッピッ」と3回鳴る。
パソコンによっては、ヘッドホンを繋ぐとBEEP音がヘッドホンからしか聴こえない機種もあるので注意。
(昔のパソコンは、ヘッドホンを繋いでいてもBEEP音は本体スピーカーから聴こえる機種のほうが普通だったけど)

908:デフォルトの名無しさん
17/01/26 02:22:00.01 xZjzKm01.net
プログラムは起動させても自動的に終了するのなら大丈夫では?
start "" /b /min sndrec32 /play /close "hoge.wav"

909:デフォルトの名無しさん
17/01/26 03:29:49.24 xZjzKm01.net
他スクリプトと併用した例
■start /minの代わりにWSHを併用(タスクバーにタブが出ない)
@if(0)==(0) @echo off
::ここから@endの間にBATスクリプトを記述し、最後はgoto :eofで終わらせる
echo 初回
cscript.exe //nologo //e:jscript "%~f0" "c:\media\foo.wav"
echo 2回目
cscript.exe //nologo //e:jscript "%~f0" "c:\media\bar.wav"
goto :EOF
@end
(new ActiveXObject("WScript.Shell")).Run('sndrec32 /play /close "'+WScript.Arguments(0)+'"',0,true);

■powershellを使ってBEEPで音階を演奏する
@echo off
:: beep(周波数,再生時間)
powershell -C "(262,294,330) | % {[Console]::beep($_,200)}"

910:デフォルトの名無しさん
17/01/26 03:42:07.64 xZjzKm01.net
訂正
powershell -C "(262,294,330) | %% {[Console]::beep($_,200)}"

911:デフォルトの名無しさん
17/01/27 00:


912:39:40.64 ID:igA7csKz.net



913:デフォルトの名無しさん
17/01/27 00:47:40.39 pF7zedh0.net
初心者です
batの書き方wikiのようなものはないんでしょうか
代表的なサンプルコードがたくさんあるサイトとか

みんな何を参考にコード書いてるの?

cmd help以外で

914:デフォルトの名無しさん
17/01/27 00:52:08.69 7NHk2TgN.net
バッチ 入門
バッチ 使い方
バッチ リファレンス

915:862
17/01/27 10:21:22.88 01h1aWf4.net
>>872
その方法をバッチファイルで実現するには、恐らく以下の方法が一番簡単だと思う。

(1) 黒いコマンドプロンプト画面で「echo echo 」の10文字(半角スペースを含む)をキーボードから打ち込む。
※この段階ではEnterキーをまだ押さない事!

(2) キーボード上の「Ctrl」キーと「G」を好きな回数だけ同時に押す。
※例えばバッチファイルの実行によりBEEP音を2回鳴らしたい場合は2回やる。

(3) そのまま「>>"」をキーボードから打ち込む。

(4) 編集したいバッチファイル名をエクスプローラの画面からコマンドプロンプト画面にドラッグ&ドロップする。
※例えば"C:\temp\sample1.bat"をエクスプローラの画面からドラッグ&ドロップすると、コマンドプロンプト画面に「C:\temp\sample1.bat」の文字列が転記される。

(5) そのまま「"」をキーボードから打ち込む。
※ファイル名を「"」(ダブルクォーテーション)で囲む理由は、ファイル名やフォルダ名に空白が含まれていても問題なく作業できるため。

(6) ここまでの一連の操作により、コマンドプロンプト画面では以下のように見えるはず。
「echo echo ^G^G>>"C:\temp\sample1.bat"」
それを目視確認できたらEnterキーを押す。これで作業完了。

(7) あとはメモ帳などのテキストエディタでバッチファイル編集を続行すれば良い。

916:デフォルトの名無しさん
17/01/27 16:42:05.37 o8MkOvQJ.net
>>873
おそらく、バッチの情報を1から100まで網羅してるページはネット上には無い。
ここの人たちは現役で使ってた人ばかりだから、習うより慣れろで成長してきた人

今から知りたければ、DOSが現役だった頃の20年~30年前の参考書を読むといいよ
図書館に行けばいくらでもある。古い本でも内容は全く問題ない。
おもにPC-9801やJ-3100関連だが、コマンドの使い方や自由度については昔も今も変わってない。

会社で98のDOSを使わざるを得ないサラリーマン向けの初心者用書籍が、わかりやすい。

dateコマンドはフォーマットが若干変わったし、formatコマンドとかハードウェア制御系は
オプションが全然違うけど、書き方は同じ。そういう差異だけはネットで調べるとよい。

917:デフォルトの名無しさん
17/01/27 16:59:28.96 ss8+Q0ea.net
DOSとNT系のコマンドはかなり違ってるから
今だとDOSのは全然参考にならないと思う
(重要なforとかsetとか)
BATの概要や各コマンドの文法はヘルプを読む
コマンドのオプション/?のヘルプでも良いけど、
Windowsのヘルプで概要から全体像を把握したほうがいい
後は、ウェブで探すことになるかな
だが、まずは自分のしたいこと、興味のある処理をどうやれば実現できるのか考えて、
googleで検索していき徐々に知識を増やすことになるだろう
読めば全部わかる教科書とかいうものは多分無いだろうしね

918:デフォルトの名無しさん
17/01/27 17:06:49.37 M+jB2zw0.net
ビーフ音ってモーみたいな音?

919:デフォルトの名無しさん
17/01/27 17:08:36.86 coDtb1o3.net
裏技みたいなやり方はどうやって習得していったのか気になる

920:デフォルトの名無しさん
17/01/27 17:31:38.


921:29 ID:01h1aWf4.net



922:デフォルトの名無しさん
17/01/27 17:46:39.61 ss8+Q0ea.net
>>880
ansi.sysの組み込みで使えるようになった奴ね
懐かしい(いろんなプロンプトを作って遊んでた)
まあエスケープシーケンスって聞くと印刷で使うものって感じだったけど

ところで、windows10 Threshold 2でコマンドプロンプトにANSI/VT100互換表示ができるような記事を読んだ記憶があるんだが
実際のところはどうなのかな

923:デフォルトの名無しさん
17/01/27 20:53:22.87 xhE2/Vp0.net
>>879
言えてる、個人的にはここで初めて知った call の使い方
call hoge %%fuga%%
みたいなの

あとこれもここで覚えた
set /p <NUL=
と コントロールコードの 0x08 [BS] を組み合わせての進捗表示

924:デフォルトの名無しさん
17/01/27 20:57:37.23 ss8+Q0ea.net
DOSだとcallも外部BATファイルしか呼べなかったんだよなあ
式評価はもとより内部ラベルも呼び出せない
@echoもこれしかコマンドに@は付けられなかった

925:デフォルトの名無しさん
17/01/27 21:16:38.29 ss8+Q0ea.net
こういうのもここで覚えたよ
for /f "delims=0" %%I in ('cmd /u /c echo 〇') do set BEL=%%I
echo %BEL%

926:デフォルトの名無しさん
17/01/27 21:20:50.03 01h1aWf4.net
>>881
URLリンク(www.excite.co.jp) の件については俺も知らん。
何しろ現在まだWin7ユーザーで、Win10は一度も使った事がないからな。

>>883
そういやechoコマンドに@を付けられるようになったのは、MS-DOSのVer.5.0からだったっけ?

927:デフォルトの名無しさん
17/01/27 21:24:19.98 coDtb1o3.net
>>884
なんじゃこりゃ
凄い

928:デフォルトの名無しさん
17/01/27 21:36:09.67 xhE2/Vp0.net
>>884
すごい、どーいう仕掛け???


コマンドプロンプトのプロパティに「コンソールの新機能の詳細」↓があって
URLリンク(technet.microsoft.com)
読んでコンソールウィンドウの透明度の変更が
CTRL+SHIFT+Plus (+) or CTRL+SHIFT+mouse scroll up
CTRL+SHIFT+Minus (-) or CTRL+SHIFT+mouse scroll down
であることを知ったのはまだいい?として
CTRL+F
で検索ができるのを初めて知ったよ……

929:デフォルトの名無しさん
17/01/27 21:49:56.71 01h1aWf4.net
>>884
おぉ、その方法で環境変数%BEL%にアスキーコード7が1つ格納されるとはな。
だから>>868と同じ仕組みの事が実現できるわけだ。
>>875の方法やVBScriptのChr関数をうまく使えない人には、面倒でも利用価値があるかもな。

930:861
17/01/29 14:25:18.42 ddwWtq0w.net
>>868
音は鳴りませんでした
>>869
できました
>>870-871
できませんでした

一瞬起動するのが気持ち悪いですが>>869で妥協しますありがとうございました

931:デフォルトの名無しさん
17/02/02 16:41:44.39 2a/0H2Op.net
教えて欲しいのですが、バッチファイルでhostsファイルを上書きコピーしたり、一部を糀谷したりすることは可能でしょうか?
単純にコピーコマンドではうまく行きません。

932:デフォルトの名無しさん
17/02/02 23:15:37.


933:79 ID:LhAHr7Zi.net



934:デフォルトの名無しさん
17/02/02 23:27:36.20 rUH8Ic6o.net
俺はXPなので最近のは知らないけど
ユーザー権限の問題なのでは?
問題のファイルはWINDOWS\system32\drivers\etcの下にある
ここは一般ユーザー(Power Users,Users)資格では変更・書き込み不可になってるはず

935:デフォルトの名無しさん
17/02/03 11:18:52.82 qUN7oehH.net
>>880
それはNTだからじゃなくて、cmdだからだよ。

936:デフォルトの名無しさん
17/02/03 11:32:41.65 PzggaHL+.net
>>893
そりゃそうだけど、BATファイルからしてみれば関係なくね?

937:デフォルトの名無しさん
17/02/03 23:21:27.20 qUN7oehH.net
>>894
command.com起動すれば従来通り動いたはずだよ。
64bitだと動かないけど。

938:デフォルトの名無しさん
17/02/06 22:43:42.84 Dm4Nipmb.net
今更だが、WindowsNT系のイベントログを自動的にテキストファイルへ出力
(エクスポート)する方法としては、PowerShellインストール済の状態で
以下の3行をバッチファイル内で実行するのが俺には一番妥協できそうだ。

powershell.exe -command ("Get-EventLog Application | Export-CSV '%~dpn0_%COMPUTERNAME%_app(%DATE:/=%-%TIME::=%時点)_psh.csv' -Encoding unicode")
powershell.exe -command ("Get-EventLog Security | Export-CSV '%~dpn0_%COMPUTERNAME%_sec(%DATE:/=%-%TIME::=%時点)_psh.csv' -Encoding unicode")
powershell.exe -command ("Get-EventLog System | Export-CSV '%~dpn0_%COMPUTERNAME%_sys(%DATE:/=%-%TIME::=%時点)_psh.csv' -Encoding unicode")

以下の3行をバッチファイル内で実行する手もあるが、
時間がかかりすぎる上に英語でしか出力されないのが難点。

wmic ntevent where "(logfile='application')" list /format:CSV > "%~dpn0_%COMPUTERNAME%_app(%DATE:/=%-%TIME::=%時点)_wmic.csv"
wmic ntevent where "(logfile='security')" list /format:CSV > "%~dpn0_%COMPUTERNAME%_sec(%DATE:/=%-%TIME::=%時点)_wmic.csv"
wmic ntevent where "(logfile='system')" list /format:CSV > "%~dpn0_%COMPUTERNAME%_sys(%DATE:/=%-%TIME::=%時点)_wmic.csv"

939:デフォルトの名無しさん
17/02/07 23:49:52.03 OwFQ4nmk.net
command.comで16bitアプリが動いたらいいのに

940:デフォルトの名無しさん
17/02/08 01:50:38.96 QE6/hL5U.net
almond.com

command not found.

941:デフォルトの名無しさん
17/02/08 07:20:17.84 h1zz+gVt.net
>>896
wevtutil じゃダメなの?
URLリンク(technet.microsoft.com)(v=ws.10).aspx

942:890
17/02/08 16:12:37.67 45vPMFEy.net
>>899
今使ってるWin7 Pro x64マシンは4年以上前に買ったものだが、そのコマンドは初めて知った。
実際やってみると従来より処理結果が見やすい上に速いな。ありがとよ。

wevtutil qe Application /f:text /uni:true > "%~dpn0_%COMPUTERNAME%_app(%DATE:/=%-%TIME::=%時点)_weu.txt"
wevtutil qe Security /f:text /uni:true > "%~dpn0_%COMPUTERNAME%_sec(%DATE:/=%-%TIME::=%時点)_weu.txt"
wevtutil qe System /f:text /uni:true > "%~dpn0_%COMPUTERNAME%_sys(%DATE:/=%-%TIME::=%時点)_weu.txt"

943:デフォルトの名無しさん
17/02/15 04:47:51.68 aywwqEZo.net
%%i(ファイル名)が半角英数、"_" だけで構成されていたらという判定はどうやればいいんでしょうか

944:デフォルトの名無しさん
17/02/15 04:56:51.86 wUshnQbT.net
findstr /?

945:デフォルトの名無しさん
17/02/15 09:59:50.17 7bSa3oIc.net
>>884ってなんで?これと関係ある?

URLリンク(ash.jp)

> UnicodeのUCS-2の文字コード表は、UTF-16と同じです。
> UTF-16 3007 〇

946:デフォルトの名無しさん
17/02/15 12:14:52.43 Q79MmBL5.net
>>903
もう一つ例を出せばはっきりするかな
for /f "delims=N" %%I in ('cmd /u /c echo 三') do set TAB=%%I

947:デフォルトの名無しさん
17/02/15 14:00:41.73 fyxpm6Tl.net
>>903
その通り。半角文字「0」のアスキーコードを16進数で表すと30で、
BEEP音を出す制御コードのアスキーコードは07だからね。

948:デフォルトの名無しさん
17/02/18 09:27:34.31 aH8To


949:s2O.net



950:デフォルトの名無しさん
17/02/18 13:52:15.93 8EFqk4IF.net
>>906
三だと、何か、あるんですか?
アホなもので、教えてください。

951:デフォルトの名無しさん
17/02/18 13:58:40.90 np+iCDRO.net
>>907
この(過去)スレで初登場したオリジナルってことかな?
コード表を見ればわかるけど使える文字は結構限られてて、この「三」は0x30以外でTABとして使える珍しい部類かな

952:デフォルトの名無しさん
17/02/18 16:19:49.41 aH8Tos2O.net
>>907

>>903のURLだと「三」は"4E09"になってるだろ?
んで↓のASCIIコード表だと「N」は"4E"だから、「N」で「三」を区切ると"09"つまり「HT(水平タブ)」が残るってこと。

URLリンク(www9.plala.or.jp)

953:901
17/02/19 13:32:35.73 OLDLML6K.net
>>908
>>909
ありがとうございます。
アホの私に、丁寧な説明、ありがとうございます。

954:デフォルトの名無しさん
17/02/20 12:38:49.83 Yd+dsT91.net
社内のシステム管理者してます。
WSHかpower shellを勉強したいのですが、VBA多少わかるのでWSHがよいかと思ってたのですが、これから勉強するならpower shellのほうが良いのでしょうか?

955:デフォルトの名無しさん
17/02/20 12:46:25.36 DNbD6mo9.net
社によりけりだから会社に聞け

956:デフォルトの名無しさん
17/02/20 12:59:56.69 o4bNBCuM.net
自分はPowerShell好きなので聞かれたら答PSって言っちゃうけど
実際は組合せが必要になる場面もあるだろうしbatも含めて触れやすい所からやって行こう

957:デフォルトの名無しさん
17/02/20 13:21:52.61 aGrUDuyU.net
今後htmlやJavaに関わる可能性があるなら、WSH(JScript)が良いかも

958:デフォルトの名無しさん
17/02/20 14:02:23.91 H64DODQY.net
一通り、全部実用できるように、するしか無いのでは.

得意なものは、一つあるけれども、他のも使えますと言うのが、よろしいかと.

959:デフォルトの名無しさん
17/02/20 14:14:39.50 GNpZgzhH.net
鬼の全パターン回答

960:デフォルトの名無しさん
17/02/20 14:19:59.36 aGrUDuyU.net
最終的にどうするかじゃないだろ
学習する優先順位、つまりまず最初に何から勉強していくのか
が問われている

961:鬼?
17/02/20 15:40:20.74 H64DODQY.net
鬼?
でも、実務上は一通り、できたほうが、よろしいかと。

962:デフォルトの名無しさん
17/02/20 18:46:18.21 ybI95Kss.net
言語の選択もさることながら
レジストリ操作が出来ると良いかと
キーは同じだけど枝が違うヤツを
変えることもあるので

963:デフォルトの名無しさん
17/02/20 20:05:53.47 7yJYF54k.net
>>911
今更 WSH はないだろ
PowerShell は癖があるけど慣れれば全然楽だよ

964:デフォルトの名無しさん
17/02/20 20:22:08.30 ynZG7eTn.net
まだまだ使える! WSHプログラミング ~ VBScriptのテストツールの紹介 (1/2):CodeZine(コードジン)
URLリンク(codezine.jp)

965:デフォルトの名無しさん
17/02/20 21:44:53.54 D++FG3XO.net
WSHはファイルに保存しないと実行できないのが致命的。

966:デフォルトの名無しさん
17/02/21 12:35:55.81 4H0MJuHo.net
.Netがハードル
C#使うとか覚えるとかで他でも使うなら良いがPSの為だけに.Net覚えるのはコスパ悪くない?

967:デフォルトの名無しさん
17/02/21 12:


968:44:43.11 ID:jPlNYKt3.net



969:デフォルトの名無しさん
17/02/21 12:45:57.01 BY3mJNCy.net
WSHはBATよりはましだがもう過去のものだし
PSはMSが広めようとするも全然使われてないし
これやったら絶対いいといった決め手はない
結局はどれに興味がわくかで決めるしかないのが現状

970:デフォルトの名無しさん
17/02/21 13:05:43.90 jPlNYKt3.net
>>925
結局、一通りマスターするしか、ないのよね。
決定的なもの、ひとつマスターすれば、okとは行かないのが現状。

971:デフォルトの名無しさん
17/02/21 14:15:03.94 y0kzTLQN.net
>>923
テキスト処理とか WSH でやる程度のことは .NET に頼らなくてもできるよ
お陰で -split 演算子と String.Split( ) みたいに似て非なるものが色々できてしまうわけだが...

972:デフォルトの名無しさん
17/02/22 20:10:23.63 mAYQQSaw.net
Windows7において二つのバッチファイルを同じフォルダ内に作る

・hoge.bat

(以下中身)
echo これはhoge.batです
pause

・hoge(A).bat

(以下中身)
echo これはhoge(A).batです
pause

保存した後おのおののバッチファイルを右クリックして「開く」を実行する。
当たり前だがおのおののecho文の内容が表示される。

ここまではいい。

次にhoge(A).batを右クリックして「管理者として実行」をクリックする。
すると、

「これはhoge.batです」

と表示されるではないか。
末恐ろしい・・・

973:デフォルトの名無しさん
17/02/22 21:19:44.12 L0zJ8/8i.net
ほえ~、ファイル名に ( が入っていると「管理者として実行」にしくる場合があるのね

hoge.bat を
echo,all "%*"
echo,0 "%~f0"
echo,1 "%~f1"
echo,2 "%~f2"
echo これはhoge.batです
pause

hoge(A).bat のファイル名を hoge(A)(S(D).bat

にすると最初の ( で分割されてるっぽいのが見て取れる

hoge(A).bat の ( の前に1個以上半角or全角スペースを入れてやると、
そのファイル名なら問題ないみたい

なんで???


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