[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 04/09 05:32 / Filesize : 301 KB / Number-of Response : 1052
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

【.cmd】 バッチファイルスクリプト %12 【.bat】



1 名前:デフォルトの名無しさん mailto:sageteoff [2017/03/11(土) 13:47:11.66 ID:2LSSeyH1.net]
拡張子が .cmd または .bat のバッチファイルのスクリプティング(プログラミング)に関わる
質問,テクニック(JScript,Perl等の埋め込みなど含む),関連情報のためのスレです。

※何でも無理矢理バッチでやろうとせず、WSH等の使用も検討しましょう。
前スレ
【.cmd】 バッチファイルスクリプト %11 【.bat】©2ch.net
echo.2ch.net/test/read.cgi/tech/1424858999/

それ以前の過去スレ
%10 peace.2ch.net/test/read.cgi/tech/1374205515/
%9  toro.2ch.net/test/read.cgi/tech/1335015478/
%8  toro.2ch.net/test/read.cgi/tech/1315844420/
%7  hibari.2ch.net/test/read.cgi/tech/1298873550/
%6  hibari.2ch.net/test/read.cgi/tech/1277465356/
%5  pc12.2ch.net/test/read.cgi/tech/1242268171/
%4  pc12.2ch.net/test/read.cgi/tech/1229955189/
%3  pc11.2ch.net/test/read.cgi/tech/1217860043/
%2  pc12.2ch.net/test/read.cgi/tech/1197881068/
%1  pc11.2ch.net/test/read.cgi/tech/1178281991/

552 名前:デフォルトの名無しさん mailto:sage [2018/05/14(月) 16:02:14.00 ID:vCNzBA31.net]
%1や環境変数が数字だけか判定するのが面倒
ぐぐってやりかたはわかったが、もっとすっきりくっきりな方法はないですか
正規表現だと ^\d+$ でおわりなのに

set W=x%1
set W=%W:0=%
set W=%W:1=%
set W=%W:2=%
set W=%W:3=%
set W=%W:4=%
set W=%W:5=%
set W=%W:6=%
set W=%W:7=%
set W=%W:8=%
set W=%W:9=%
if '%W%=='x echo 数字

553 名前:デフォルトの名無しさん mailto:sage [2018/05/14(月) 16:37:10.19 ID:qPzKX5Gg.net]
set X=100
echo %X%|findstr /X "[0-9][0-9]*"&&echo 数字

こうとか

554 名前:デフォルトの名無しさん mailto:sage [2018/05/15(火) 01:55:36.53 ID:VsPlEm8N.net]
@rem 2147483648 以上の数は扱えないため、大きい値が入る条件には不向き。

set "W=%1"
set DUMMY=a
set /A "DUMMY=W*1"
if not "%W%"=="%DUMMY%" (echo 数字以外) else echo 数字のみ

555 名前:デフォルトの名無しさん mailto:sage [2018/05/15(火) 15:39:31.76 ID:Aaz/hbaw.net]
>>528
-123 数字のみ

556 名前:デフォルトの名無しさん mailto:sage [2018/05/15(火) 15:47:52.58 ID:Aaz/hbaw.net]
0001 数字以外

557 名前:デフォルトの名無しさん mailto:sage [2018/05/16(水) 00:05:23.47 ID:vNnFvDtx.net]
ありがとうございます
>>527
findstって正規表現のようなことができるのですね、知らなかったです

>>528
英字だけ、数字だけだといいのですが、英数字混在文字列でエラーになりました
*1 の代わりに +0も同じでした

558 名前:デフォルトの名無しさん mailto:sage [2018/05/16(水) 03:54:43.21 ID:Hrg3NbAG.net]
@echo off
call :check_num %1 result
echo %result%
pause
goto :eof

:check_num
if "%~1"=="" set "b=FALSE" & goto :eof
for /f "delims=-+0123456789 tokens=* eol=" %%i in ("%~1") do (
set "a=%%i"
if defined a (set "b=FALSE") else set "b=TRUE"
)
endlocal & set "%2=%b%"

559 名前:デフォルトの名無しさん mailto:sage [2018/05/16(水) 04:03:04.73 ID:Hrg3NbAG.net]
>>532
7行目の :check_num の次の行に
setlocal
を追加願います

560 名前:デフォルトの名無しさん mailto:sage [2018/05/16(水) 04:13:36.97 ID:Hrg3NbAG.net]
なんか間違ってたので書き直した

@echo off
call :check_num %1 result
echo %result%
pause
goto :eof

:check_num
setlocal
if "%~1"=="" set "b=FALSE" & goto x
for /f "delims=-+0123456789 tokens=* eol=" %%i in ("%~1") do (
set "a=%%i"
if defined a (set "b=FALSE") else set "b=TRUE"
)
:x
endlocal & set "%2=%b%"



561 名前:デフォルトの名無しさん mailto:sage [2018/05/16(水) 16:36:26.52 ID:VQztSlVV.net]
1"2
result"=="" set "b=FALSE" & goto x の使い方が誤っています。

562 名前:デフォルトの名無しさん mailto:sage [2018/05/16(水) 16:48:32.10 ID:VQztSlVV.net]
"1"
TRUE
1"2"
ECHO は <OFF> です。

563 名前:デフォルトの名無しさん mailto:sage [2018/05/16(水) 21:51:04.87 ID:Hrg3NbAG.net]
引数の中の " の対策すると大変なんで、やりたくない
やりたい人、どうぞ

564 名前:デフォルトの名無しさん mailto:sage [2018/05/16(水) 22:31:00.96 ID:VQztSlVV.net]
1^2
1|2
1&2

565 名前:デフォルトの名無しさん mailto:sage [2018/05/16(水) 23:12:48.91 ID:Hrg3NbAG.net]
引数の中に cmd で特別な意味を持つ文字が有る場合は左に ^ を付けるか
全体を " で囲むしかないよ

566 名前:デフォルトの名無しさん mailto:sage [2018/05/16(水) 23:15:29.43 ID:VQztSlVV.net]
>>538>>527宛て

>>534的には、1^^2 []
[ここ壊れてます]

568 名前:デフォルトの名無しさん mailto:sage [2018/05/16(水) 23:50:08.13 ID:Hrg3NbAG.net]
FALSE になるようだが何か問題があるの?

569 名前:デフォルトの名無しさん mailto:sage [2018/05/17(木) 00:05:45.00 ID:TsNh8oQN.net]
ああ分かった リテラルが 1^2 の場合ね 失礼

570 名前:デフォルトの名無しさん mailto:sage [2018/05/17(木) 00:31:20.52 ID:TsNh8oQN.net]
call :check_num "%~1" result
にでもすりゃいいのかな
こういうのは考え出すときりが無い様な気がするが



571 名前:デフォルトの名無しさん mailto:sage [2018/05/17(木) 01:18:19.29 ID:zVFG07SK.net]
分かってるのかどうか知らないが、
1"2"が、ECHO は <OFF> です。になるのは、eol="が効いてるため

572 名前:デフォルトの名無しさん mailto:sage [2018/05/17(木) 06:56:29.62 ID:TsNh8oQN.net]
eof= を消すと副作用があるし
どっちにしろ引数に ; があると誤動作するみたいだし
こりゃあもうお手上げだな

573 名前:デフォルトの名無しさん mailto:sage [2018/05/17(木) 07:02:08.36 ID:TsNh8oQN.net]
あ、eol= だった

574 名前:デフォルトの名無しさん mailto:sage [2018/05/17(木) 07:11:43.15 ID:pqvSuRzJ.net]
質問者が「もっとすっきりくっきりな方法」と言ってるんだから複雑でトリッキーな方法は求められてなないだろう

575 名前:デフォルトの名無しさん mailto:sage [2018/05/17(木) 08:50:29.12 ID:zVFG07SK.net]
>>545
>>269-273

576 名前:デフォルトの名無しさん mailto:sage [2018/05/17(木) 09:36:13.96 ID:cmWUEZX7.net]
>>547
いつもそうなるけど、バッチじゃ諦めろ、が正解になってしまうよw

577 名前:デフォルトの名無しさん mailto:sage [2018/05/17(木) 10:17:41.58 ID:TsNh8oQN.net]
どんな方法でも良いから
引数の中に " とか ; が入ってても
正しく動作するのを頼む

というのは絶対に無理なのかね

578 名前:デフォルトの名無しさん mailto:sage [2018/05/17(木) 11:47:23.61 ID:TsNh8oQN.net]
>>550が不可ならそれを前提条件にするしかないだろ
ちょっと直してみた
@echo off
call :check_num "%~1" result
echo %result% & pause & goto :eof
:check_num
setlocal
set "b=FALSE" & if "%~1"=="" goto x
for /f "delims=-+0123456789 tokens=*" %%i in ("%~1") do (
set "a=%%i" & if not defined a set "b=TRUE"
)
:x
endlocal & set "%2=%b%"

579 名前:デフォルトの名無しさん mailto:sage [2018/05/17(木) 17:15:43.43 ID:TsNh8oQN.net]
とりあえず引数の " と ; の対策らしきもの
引数は行末まで1個のみ
もう嫌気がさしたのでこれ以上はやめとく
@echo off
set a=%*"
set /a b=0,c=0
setlocal enabledelayedexpansion
:x
set d="!a:~%b%,1!!a:~%b%,1!"
if !d!=="" goto y
if !d!=="""" set /a c+=1
if !d!==";;" set /a c+=1
set /a b+=1 & goto x
:y
endlocal & set c=%c%
set "e=FALSE" & if %c% gtr 1 (goto z) else set "a=%*"
for /f "delims=-+0123456789 tokens=*" %%i in ("%a%") do (
set "a=%%i" & if not defined a set "e=TRUE"
)
:z
echo %e%

580 名前:デフォルトの名無しさん mailto:sage [2018/05/17(木) 17:16:28.81 ID:zVFG07SK.net]
>>550
@echo off
set "arg1=%1"
call :check_num arg1 result
echo %result% & pause & goto :eof
:check_num
setlocal EnableDelayedExpansion
set "b=FALSE"
for /f "delims=0123456789 tokens=*" %%i in ("!%1!") do (
set "a=%%i" & if not defined a set "b=TRUE"
)
:x
endlocal & set "%2=%b%"
goto :eof

引数に ; は指定できない(半角空白、カンマ、セミコロン、=は引数の区切りを示すため)
なお、遅延環境変数の展開を使わないでも以下のようなチェックで最初に弾けば可能
if "%arg1:"=%" equ "%arg1:"=”%" (echo ^"なし) else echo ^"あり



581 名前:デフォルトの名無しさん mailto:sage [2018/05/17(木) 17:18:28.36 ID:zVFG07SK.net]
なお、+-は除くのが吉
+1+2-3

582 名前:デフォルトの名無しさん mailto:sage [2018/05/17(木) 18:05:24.87 ID:TsNh8oQN.net]
>554.bat 1"&ab"
'ab""' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
TRUE

583 名前:デフォルトの名無しさん mailto:sage [2018/05/17(木) 21:22:44.52 ID:zVFG07SK.net]
>>555
これ以上はファイル渡しにすべきだろう
set /p
or
for /f delimes^=^ tokens^=*^ eol^=

584 名前:デフォルトの名無しさん mailto:sage [2018/05/17(木) 21:53:53.10 ID:TsNh8oQN.net]
>>555
554.bat とあるが実際は >>553 のバッチ処理結果です
バッチ2行目の set コマンドの、左側の " が悪さをしてる
当然、下にあるチェック文もそのままでは使えない
引数 1;2 は実際には2つに分かれるが
これで TRUE を返すのは違和感あるので
>>552 では FALSE を返している
2つの %* を %1 にすれば TRUE を返せる筈

585 名前:デフォルトの名無しさん mailto:sage [2018/05/18(金) 12:57:02.82 ID:CQAI+hTy.net]
これが分からない

https://social.technet.microsoft.com/Forums/ja-JP/610268b2-c3f7-4e4f-8aa2-9d32353804e4?forum=win10itprogeneralJP

586 名前:デフォルトの名無しさん mailto:sage [2018/05/18(金) 15:14:59.49 ID:nWqd9LPa.net]
for /f %%i in ('"cmd /k prompt $h <nul"') do set BS=%%i
set /p AAA=".%BS%   必要ですか?(y/n):"

587 名前:デフォルトの名無しさん [2018/05/23(水) 19:31:22.87 ID:Au5e7VGg.net]
僕の知り合いの知り合いができたパソコン一台でお金持ちになれるやり方
役に立つかもしれません
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』

1FF18

588 名前:デフォルトの名無しさん mailto:sage [2018/05/24(木) 10:48:33.72 ID:cPlRxlDn.net]
1FF18

589 名前:デフォルトの名無しさん mailto:sage [2018/06/10(日) 03:50:12.86 ID:TMZk6u5D.net]
バッチファイルと同じ階層に複数のテキストファイルがあって、
バッチファイルに次々とドラッグ&ドロップしたファイル名(拡張子含む)のみリスト化していくのは下記でできるのは分かったのですが…
@echo off
for %%f in (%*) do (
echo %%~nxf
) >> list.txt
 
しかし、バッチファイルと同じ階層(別の階層でも良いですが)に複数フォルダがあり、各フォルダ内にテキストファイルが複数ある場合に、
フォルダをバッチファイルに1つ1つD&Dすることにより、そのフォルダ内のファイル名(拡張子)のみリスト化していくコマンドが分からず詰まっています。
/rを使わずにわざわざ1つずつD&Dするのは、単にファイル名の順番ではなく、リスト化を意図した順番にしたいからです。
どなたかお願いします。

590 名前:デフォルトの名無しさん mailto:sage [2018/06/10(日) 16:08:13.36 ID:fV9CYqGb.net]
なんだって?



591 名前:デフォルトの名無しさん mailto:sage [2018/06/10(日) 19:14:45.63 ID:UcKh88So.net]
@echo off
cd /d "%~1"
for /r %%f in (*.txt) do (
echo %%~nxf
) >> "%~dp0list.txt"

592 名前:デフォルトの名無しさん mailto:sage [2018/06/10(日) 20:30:30.29 ID:T1x52eBJ.net]
まずは、
>リスト化を意図した順番
これを詳しく説明するところからだな

593 名前:562 mailto:sage [2018/06/10(日) 20:59:39.63 ID:TMZk6u5D.net]
>>564
できました
ありがとうございます!

>>565
意図した順番というのは、D&Dした順番、という意味でした

594 名前:デフォルトの名無しさん [2018/07/04(水) 22:24:09.32 ID:gFgZc5FG.net]
GTD

595 名前:デフォルトの名無しさん mailto:sage [2018/07/05(木) 16:48:32.11 ID:AeL6VB/V.net]
GTD

596 名前:デフォルトの名無しさん mailto:sage [2018/07/08(日) 09:59:18.33 ID:48/+VLR1.net]
ファイル名に半角スペースを含んで拡張子も一つじゃない複数のファイルをドロップしてファイルごとに処理したいんだけどどうfor書いたらいい?
今はこんな感じで書いてるんだけど半角スペースで切れちゃう
for %%f in (%*) do (
echo "%%~nxf"
)

597 名前:デフォルトの名無しさん mailto:sage [2018/07/08(日) 17:55:51.22 ID:fq5YPvHI.net]
>>569
それで問題なさそうなんだけど、
どういう問題なのか分からないから詳しく現象を説明してくれ

598 名前:デフォルトの名無しさん mailto:sage [2018/07/08(日) 18:29:00.73 ID:48/+VLR1.net]
>>570
ごめん半角じゃなくて全角スペースで切れてるみたいだ
"aaa bbb.txt"
こうなるはずがファイル一つドロップするだけで↓になる
"aaa"
"bbb.txt"

599 名前:デフォルトの名無しさん mailto:sage [2018/07/08(日) 19:34:33.35 ID:ayaOLpVg.net]
>>569
forじゃないけど、こんなんじゃあかんの?

:loop
echo %~nx1
shift
if not "%~1"=="" goto :loop

600 名前:デフォルトの名無しさん mailto:sage [2018/07/08(日) 20:03:03.50 ID:noo5aK3K.net]
aaa bbb.txtとかa&b.txtみたいなのは%1等で受け取っても切れるね
cmdの独特なコマンドラインパース処理が悪いともいえるし
半角スペース含まれてないのをいいことにD&D時にダブルクォートで囲わないOS側が悪いともいえるし困ったもんだな
D&Dで処理するのはスクリプト言語使った方がいいかもしれん



601 名前:デフォルトの名無しさん mailto:sage [2018/07/08(日) 20:56:02.67 ID:O/180cHX.net]
いまだにスペース問題抱えてるとは思わないよな
もう10数年以上前からあるのに

602 名前:デフォルトの名無しさん mailto:sage [2018/07/08(日) 20:57:49.35 ID:3ARFRdhF.net]
こういうの直すと互

603 名前:キ性の問題でも起きるの? []
[ここ壊れてます]

604 名前:デフォルトの名無しさん mailto:sage [2018/07/08(日) 21:45:56.33 ID:PKG5RTYD.net]
>571
こうで良くないかなぁ?/d を使うパターン。

for /d %%f in (%*) do (
echo %%~nxf
)

>>575
そういう仕様に依存している過去のコードの動作に影響が出るのさ。
そういうコードは今までずっと企業内で使われている。
作者不詳のまま…

605 名前:デフォルトの名無しさん mailto:sage [2018/07/08(日) 21:49:43.77 ID:PKG5RTYD.net]
ごめん、/d でも全角はアウトですた。
わけわからーん

606 名前:デフォルトの名無しさん mailto:sage [2018/07/08(日) 22:24:06.32 ID:vrRjc8/F.net]
昔、どこかのサイトで似たようなの見たけど
%* を加工して解決しようとしてたが
数十行もあったようなw
でも、俺が動作確認したら全然ダメだったし

607 名前:デフォルトの名無しさん mailto:sage [2018/07/08(日) 22:50:01.23 ID:E+arm29j.net]
>>571
Windows 10 Home 1803 だけど全角空白も & も>>569で問題なく処理できるよ

608 名前:デフォルトの名無しさん mailto:sage [2018/07/08(日) 22:57:56.95 ID:vrRjc8/F.net]
>>579
引数はフルパスだからな
フォルダ名に半角スペースあるだろ

609 名前:デフォルトの名無しさん mailto:sage [2018/07/08(日) 23:16:12.53 ID:dDjh6KF7.net]
>>569
for の代わりに forfiles を使うと ""付きファイル名なのでうまくいく(たぶん)

610 名前:デフォルトの名無しさん mailto:sage [2018/07/08(日) 23:36:45.60 ID:U6QPmMsx.net]
>>569
全角スペースを文字として扱うか、半角スペースと同じように扱うかについて、
cmdは中途半端な扱いをしているようだしな。
フルパスに半角スペースがあると、全角スペースは文字として扱われるが、
フルパスに半角スペースがないと、全角スペースは半角スペースと同じ扱いになる。
しかもクォートしただけでは対処できないという困ったことに。

対処方法としては、フルパスの何処かに半角スペースを入れてクォートするだけ。



611 名前:デフォルトの名無しさん mailto:sage [2018/07/08(日) 23:38:41.06 ID:PKG5RTYD.net]
>>579
Win10 Pro 1803 64bit。
全角がアウト。

612 名前:デフォルトの名無しさん mailto:sage [2018/07/08(日) 23:39:37.04 ID:O/180cHX.net]
昔からある不具合なんだから互換性も糞もない

613 名前:デフォルトの名無しさん mailto:sage [2018/07/08(日) 23:53:08.78 ID:E+arm29j.net]
>>580, >>583
ああなるほど
すまん、ボケてたわ

614 名前:デフォルトの名無しさん mailto:sage [2018/07/09(月) 00:39:27.28 ID:CF6LQR6B.net]
全角空白の場合、ダブルクォーテーションで括られないのに、引数の区切り記号として取り扱われるってことか

間に、ダブルクォーテーションで括る操作をかませばいいか
@if (0)==(0) echo off
set arg=%*
for /f "delims=" %%f in ('cscript //nologo /e:jscript "%~f0" %%arg%%') do echo %%f
pause
goto :eof
@end
for(var i=0,arg=WScript.arguments;i<arg.length;i++) WScript.Echo('"'+arg(i)+'"');

615 名前:デフォルトの名無しさん mailto:sage [2018/07/09(月) 00:46:29.65 ID:CF6LQR6B.net]
いや引数を各行に分解したから、括る必要もないな
最終行訂正
for(var i=0,arg=WScript.arguments;i<arg.length;i++) WScript.Echo(arg(i));

616 名前:デフォルトの名無しさん mailto:sage [2018/07/09(月) 01:05:14.62 ID:CF6LQR6B.net]
やっぱり括ってたほうがトラブルが少ないかも
あと、半角空白が無いと括られないから、
a^b.txt
とかはBATに入ってくる時点でもうダメだな
%CMDCMDLINE%
とか見てやれば可能だけど

617 名前:デフォルトの名無しさん mailto:sage [2018/07/09(月) 01:10:51.13 ID:CF6LQR6B.net]
結論としては、色々苦労して対応するより、
必ず半角空白をいれたフォルダにファイルを置くようにしたほうがいいね

618 名前:デフォルトの名無しさん mailto:sage [2018/07/09(月) 01:30:40.02 ID:M0pRa/sz.net]
これらは""で括れば問題ない
a=b.txt
a;b.txt
a^b.txt

619 名前:デフォルトの名無しさん mailto:sage [2018/07/09(月) 01:50:11.67 ID:M0pRa/sz.net]
これは""で括ってもechoで化ける
%cd%.txt

620 名前:デフォルトの名無しさん mailto:sage [2018/07/09(月) 21:52:59.96 ID:JZ4qv3b5.net]
俺はバッチスクリプトを生成するスクリプトをPerlだのPhysonで書くときは
ダブルクォートで囲わずに全部キャレットでエスケープしてる。

今回の件は %* が勝手に全角空白で区切る仕様が駄目なんだけど…
スクリプトから呼ぶ場合には何とかなっても、D&Dの



621 名前:時点で引数を加工できないってとこに問題がある。
shift しても無駄、っていうところ…。

解決策…、ある??俺は思いつかない…。
[]
[ここ壊れてます]

622 名前:デフォルトの名無しさん [2018/07/09(月) 22:17:13.68 ID:FlHlLFRn.net]
nbspでもなるな

623 名前:デフォルトの名無しさん mailto:sage [2018/07/09(月) 22:21:09.09 ID:CF6LQR6B.net]
a&b.txtとかはcmd. exeに入る前に対処しないとね
BAT以外の別スクリプトにD&Dして、そっちで引数を加工後にBATを呼んでもらうようにするぐらい

624 名前:デフォルトの名無しさん mailto:sage [2018/07/09(月) 22:25:10.86 ID:CF6LQR6B.net]
ところでcmdスレなのに、なんでcmd. exeがNGワードなんだよ

625 名前:デフォルトの名無しさん mailto:sage [2018/07/09(月) 22:54:28.83 ID:XFrzb5uR.net]
確認してないけどcloudflareがコマンドインジェクション対策で弾いてんるんじゃないの
ls -lとかもできなかったはずだし

626 名前:デフォルトの名無しさん mailto:sage [2018/07/10(火) 07:31:20.48 ID:LbQkaO6y.net]
Ruby, PowerShell を使った方が良い

バグるのは低品質だし、時間の無駄

627 名前:デフォルトの名無しさん mailto:sage [2018/07/11(水) 20:28:10.61 ID:mCCOIiej.net]
>>597
Ruby は実行環境のインスコがいる。
PoerShell はD&Dできない。
それ以前に、特殊な世界ではいまだに XP が現役だったりする。
Win7SP1以降のアップデートパッチを1個でも当てたら動作保証しませんなどというフザけた業務システムも実在する。
レジストリを汚すインスコは駄目だけど、ネイティブコンパイルしたコマンドをコピーして使う分にはおk、てな環境もある。

とりあえず、スクリプトを使用した D&D のファイルパス問題回避の最大公約数的解決は VBScript しかないんじゃないかな。
(さすがに Win9X な環境はもうないだろう…と思うけど)
使える環境なら検討した方がいいけど、安易な「○○使えばいい」という回答は頭が悪すぎる。

628 名前:デフォルトの名無しさん mailto:sage [2018/07/11(水) 21:11:59.69 ID:/R7esjNT.net]
なら環境毎に勝手に使えばいいんだから最大公約数なんて決める必要ないのでは

629 名前:デフォルトの名無しさん mailto:sage [2018/07/12(木) 01:03:34.20 ID:MfQE+JgU.net]
NTも現役だよボケ

630 名前:デフォルトの名無しさん mailto:sage [2018/07/12(木) 11:56:39.69 ID:72SuVZq5.net]
それ以前に、DOS自体が、現e(ry



631 名前:デフォルトの名無しさん mailto:sage [2018/07/12(木) 14:54:19.05 ID:+klw6xr1.net]
>>569 無理矢理にバッチで書いてみた

@echo off
set "a=%cmdcmdline:"=""%"
setlocal enabledelayedexpansion
set /a b=0,n=0
set "s=" & set "d=""
:x1
if not "!a:~%b%,1!"=="/" set /a b+=1 & goto x1
:x2
if "!a:~%b%,1!"=="!d!" set /a n+=1
if !n! equ 6 set /a b+=2 & goto x3
set /a b+=1 & goto x2
:x3
set "a=!a:~%b%,-2! " & set /a b=0
:x4
if not defined a goto x8
if "!a:~%b%,1!"=="!d!" set /a n=0 & goto x6

下に続く

632 名前:デフォルトの名無しさん mailto:sage [2018/07/12(木) 14:54:43.36 ID:+klw6xr1.net]
:x5
if not "!a:~%b%,1!"==" " set /a b+=1 & goto x5
set "s=!s!!d!!d!!a:~0,%b%!!d!!d! " & set /a b+=1
set "a=!a:~%b%!" & set /a b=0 & goto x4
:x6
if "!a:~%b%,1!"=="!d!" set /a n+=1
if !n! equ 4 set /a b+=1 & goto x7
set /a b+=1 & goto x6
:x7
set "s=!s!!a:~0,%b%! " & set /a b+=1
set "a=!a:~%b%!" & set /a b=0 & goto x4
:x8
set "s=!s:""="!"
endlocal & set s=%s%
for %%f in (%s%) do echo "%%~nxf"
pause

633 名前:デフォルトの名無しさん mailto:sage [2018/07/12(木) 20:30:02.59 ID:Gmf0IrMF.net]
>>602
ファイル名に全角スペースが含まれていない場合に""が一つ余計に出力されます

634 名前:デフォルトの名無しさん mailto:sage [2018/07/12(木) 20:30:48.00 ID:Gmf0IrMF.net]
訂正
全角スペースが含まれず半角スペースが含まれている場合

635 名前:デフォルトの名無しさん mailto:sage [2018/07/12(木) 20:48:15.33 ID:+klw6xr1.net]
レスありがとう
でもこちらでは再現できない
出来たら具体例を

636 名前:デフォルトの名無しさん mailto:sage [2018/07/12(木) 21:08:43.02 ID:+klw6xr1.net]
もしかしたらset文の行末にスペースがありませんかね?
行末のスペースが有ったら全て削除してみて下さい

637 名前:デフォルトの名無しさん mailto:sage [2018/07/12(木) 21:25:30.03 ID:Gmf0IrMF.net]
>>606
もうちょい検証してこんなファイル名で発生するのを確認しました
"aーa b.txt"
""
専ブラからコピーしたんでスペースとかはありませんでした
長めのスクリプト貼るときはpastebinとか使ったほうがいいかもしれません

638 名前:デフォルトの名無しさん mailto:sage [2018/07/12(木) 21:31:57.91 ID:+klw6xr1.net]
バッチファイル名にスペースがあると不味いようです

639 名前:デフォルトの名無しさん mailto:sage [2018/07/12(木) 21:37:35.42 ID:+klw6xr1.net]
違うな...
ファイル名なんですか?

640 名前:デフォルトの名無しさん mailto:sage [2018/07/12(木) 21:39:01.64 ID:Gmf0IrMF.net]
バッチファイル自体はtest6.batなのでスペースはありません
このファイル名だと処理自体が終わらなくなりました
ーa ーb ーc.txt



641 名前:デフォルトの名無しさん mailto:sage [2018/07/12(木) 21:39:34.44 ID:Gmf0IrMF.net]
最初に検証したファイル名は
aーa b.txt
です

642 名前:デフォルトの名無しさん mailto:sage [2018/07/12(木) 21:52:50.96 ID:+klw6xr1.net]
バッチファイル名
"test.bat" がOK, "test - コピー.bat" が NG
"ー" がダメ文字っぽい
なんだこりゃ

643 名前:デフォルトの名無しさん mailto:sage [2018/07/12(木) 22:45:26.82 ID:+klw6xr1.net]
>>612
とりあえず最初の3行を

@echo off
setlocal enabledelayedexpansion
set "a=!cmdcmdline:"=""!"
set "a=!a:ー=/1!"

最後の5行を

:x8
set "s=!s:/1=ー!"
set "s=!s:""="!"
endlocal & set s=%s%
for %%f in (%s%) do echo "%%~nxf"
pause

ダメ文字の詳細は不明
まだ有ったら、/2 /3 ... 置換

644 名前:デフォルトの名無しさん mailto:sage [2018/07/12(木) 23:31:47.70 ID:+klw6xr1.net]
これも追加
5行目
set "a=!a:―=/2!"
:x8の次の行に
set "s=!s:/2=―!"

645 名前:デフォルトの名無しさん mailto:sage [2018/07/13(金) 00:39:35.42 ID:7GlypEZW.net]
漢字コードが関係しているのかも
shift−jis
chcp 932

utf-8
chcp 65001

で試してみたら

646 名前:デフォルトの名無しさん mailto:sage [2018/07/13(金) 06:59:58.30 ID:laaSwUH8.net]
if文のバグ?

@echo off
setlocal enabledelayedexpansion
set a=ーー
set b=――
set c=xx
set d=""
if "!a!"=="!d!" echo NG1
if "!b!"=="!d!" echo NG2
if "!c!"=="!d!" echo NG3
pause

結果は
NG1
NG2

647 名前:デフォルトの名無しさん mailto:sage [2018/07/13(金) 19:59:02.76 ID:laaSwUH8.net]
>>617
if "!a!"=="!b!" echo NG4

結果は
NG4

まあ、見た目は似ているが...

648 名前:デフォルトの名無しさん mailto:sage [2018/07/13(金) 20:29:29.46 ID:laaSwUH8.net]
ちなみに >>617 をメモ帳にコピペして
変数 a の文字列で検索したら、なぜか変数 b にも一致したりする
逆もまた然り

649 名前:デフォルトの名無しさん mailto:sage [2018/07/14(土) 06:43:27.53 ID:8rUsawXH.net]
>>612
if文の不具合は引用符絡みのようなので
それを削除して書き直しました

@echo off
call :set_arg arg
if not defined arg goto :eof
for %%f in (%arg%) do echo "%%~nxf"
pause & goto :eof

:set_arg
setlocal enabledelayedexpansion
set a=!cmdcmdline!
set /a b=0,n=0
set "s=" & set "c=/" & set "e= " & set "d=""
:x1
if not !a:~%b%^,1!==!c! set /a b+=1 & goto x1
:x2
if !a:~%b%^,1!==!d! set /a n+=1
if !n! equ 3 set /a b+=2 & goto x3
set /a b+=1 & goto x2

下に続く

650 名前:デフォルトの名無しさん mailto:sage [2018/07/14(土) 06:43:59.73 ID:8rUsawXH.net]
:x3
set a=!a:~%b%,-1!& set /a b=0
:x4
if not defined a goto x8
if !a:~%b%^,1!==!d! set /a n=0 & goto x6
:x5
if not !a:~%b%^,1!==!e! set /a b+=1 & goto x5
set s=!s!!d!!a:~0,%b%!!d!!e!& set /a b+=1
set a=!a:~%b%!& set /a b=0 & goto x4
:x6
if !a:~%b%^,1!==!d! set /a n+=1
if !n! equ 2 set /a b+=1 & goto x7
set /a b+=1 & goto x6
:x7
set s=!s!!a:~0,%b%!!e!& set /a b+=1
set a=!a:~%b%!& set /a b=0 & goto x4
:x8
if defined s set s=!s:~0,-1!
endlocal & set %1=%s%



651 名前:デフォルトの名無しさん mailto:sage [2018/07/14(土) 09:47:55.50 ID:17hM4zE5.net]
>>620
パスに全角半角含むかどうかに関わらず
a.pngがNG
a - コピー.pngがOK
あ.pngがNG

652 名前:デフォルトの名無しさん mailto:sage [2018/07/14(土) 18:45:20.78 ID:8rUsawXH.net]
>>622
すみません。:x3 の下の行を下記に訂正します

:x3
set a=!a:~%b%,-1!!e!& set /a b=0






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](;´∀`)<301KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef