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

■ このスレッドは過去ログ倉庫に格納されています
2020/08/15(土) 07:00:26.64ID:f3kW5kCx
拡張子が .cmd または .bat のバッチファイルのスクリプティング(プログラミング)に関わる
質問,テクニック(JScript,Perl等の埋め込みなど含む),関連情報のためのスレです

※何でも無理矢理バッチでやろうとせず、WSH等の使用も検討しましょう

過去スレ
%13 http://mevius.2ch.net/test/read.cgi/tech/1542779527/
%12 http://mevius.2ch.net/test/read.cgi/tech/1489207631/
%11 http://echo.2ch.net/test/read.cgi/tech/1424858999/
%10 http://peace.2ch.net/test/read.cgi/tech/1374205515/
%9 http://toro.2ch.net/test/read.cgi/tech/1335015478/
%8 http://toro.2ch.net/test/read.cgi/tech/1315844420/
%7 http://hibari.2ch.net/test/read.cgi/tech/1298873550/
%6 http://hibari.2ch.net/test/read.cgi/tech/1277465356/
%5 http://pc12.2ch.net/test/read.cgi/tech/1242268171/
%4 http://pc12.2ch.net/test/read.cgi/tech/1229955189/
%3 http://pc11.2ch.net/test/read.cgi/tech/1217860043/
%2 http://pc11.2ch.net/test/read.cgi/tech/1197881068/
【.cmd】 バッチファイルスクリプト %1 【.bat】
http://pc11.2ch.net/test/read.cgi/tech/1178281991/
バッチファイルプログラミング 3.bat
http://pc11.2ch.net/test/read.cgi/tech/1148485555/
バッチファイルプログラミング 2.bat
http://pc8.2ch.net/test/read.cgi/tech/1104911889/
バッチファイルプログラミング質問スレ
http://pc5.2ch.net/test/read.cgi/tech/1040614686/
2021/12/02(木) 22:16:15.49ID:sGas3Vn9
メモ
フェアフィールドの公式
2021/12/02(木) 22:37:42.24ID:s/MRATw/
割とクソゴミな式な
式の意味が分かり難くなるような式変形しちゃダメだわ
敢えてやってんだろうけどさ
Wikipediaの解説とかも良く分かってないバカが書いたんだろうなと思う
まあ導出のアプローチの仕方が悪いってだけだが
2021/12/04(土) 22:30:00.94ID:Nf0n5MKs
日付の質問です。
CSVの日付部分のセルのデータが壊れていて、5桁の整数になっています。
ググって調べてみたら、どうも1899/12/30が0のシリアル値のようです。
これをYYYY/MM/DDの文字列に変換したいんですが計算式がわかりません。
よろしくお願いします。
2021/12/04(土) 23:24:36.10ID:vRpkCUu9
>>543
CDate( )
2021/12/05(日) 00:20:38.02ID:KxbO9WQf
>>543
エクセルあればセルの表示設定を変える
2021/12/05(日) 06:43:24.27ID:KxbO9WQf
>>543 変数 n を変換
set /a n+=693899,a=365,b=1461,c=36524,e=146097
set /a f=n/e,g=(n+1)/e-f,n-=f,n+=(n-g)/c,f=n/b,g=(n+1)/b-f,n-=f
set /a n+=(n-g)/a*3+(n-61)/a+(n-122)/a+(n-214)/a+(n-275)/a-306
set /a y=n/372+1,m=n/31%%12+101,d=n%%31+101
set n=%y%/%m:~1%/%d:~1%

各定数は順に、
0/3/1〜1899/12/29の日数(全てグレゴリオ暦)
西暦1年から1,4,100,400年の日数
3〜4,3〜6,3〜9,3〜11,3〜12月の日数
31*12の日数
2021/12/05(日) 09:15:29.34ID:/JnG12pN
> 1899/12/30が0のシリアル値
まあ実質的にはそれでも間違いでは無いけど
エクセルは一応 1900/01/01 が 1
でも 1900/02/29 が存在するバグ仕様のせいで 1900/03/01 以降 +1 になってしまい 1899/12/31 が 1 のような値になってしまう
1900/03/01 以降の値しか無いなら一律で構わないけれど全てに対応させるには以下の3種必要
・1900/01/01 〜 1900/02/28
・1900/02/29
・1900/03/01 〜
2/29だけ例外で扱って残りは03/01〜の時、通日をフラグで-1する感じかな
0/3/1 を 0 とした値に直して %1 に与えたら以下の式で年月日を出せる
set /a "R=(R4=(R1oo=(R4oo=%~1%%146097)%%36524)%%1461)%%365, Y4oo=%~1/146097, Y1oo=R4oo/36524, Y4=R1oo/1461, Y1=R4/365, L=(Y1oo|Y1)/4, R+=L*365, k=(R*5+2)/153, d=R+1-(306*k+4)/10, f=k/10, m=k+3-f*12, y=400*Y4oo+100*Y1oo+4*Y4+Y1-L+f"
echo %y% / %m% / %d%
2021/12/05(日) 09:29:31.66ID:KxbO9WQf
シリアル値が60以下がどうとかいう話だよね
質問が5桁の整数とあるので無視したよ
2021/12/05(日) 10:57:38.65ID:rW6bYpGZ
もしかしてみずほの案件やってた人?
2021/12/05(日) 11:31:10.50ID:KxbO9WQf
そもそも60以下になるとソフトにより挙動が違う
Excelとは限らない
出どころ確認が先決
スレチの話だけどね
2021/12/05(日) 11:31:33.19ID:4iCsIwjm
ワロwww
2021/12/05(日) 11:39:17.80ID:4iCsIwjm
わざわざ対応する必要なんて無いとは思うけど
定数の説明なんかよりも60以下で不正な値になるという注意書きの方が重要だわな
みずほも言われたことしかやらない企業体質がどうの言われてるね
こんな感じで小さなバグが内包しまくってるのかもなw
2021/12/06(月) 16:06:42.92ID:yBc7foB1
>>546
一旦閏日全部引いて、月が一律31日になるよう加算してるんだね
面白い
(n-61)/a+(n-122)/a+(n-214)/a+(n-275)/a
この式が4-11月の不足分を足してるんだろうけど
なんでこの式で行けるのかイメージ出来ない
2021/12/06(月) 19:19:45.42ID:+EfoGYZX
>>546
バッチありがとうございます。動作確認しました。助かりました。
>>550
ソフトはLibreOfficeです。後出しですみません。
シリアル値は全て連続です。質問は5桁設定でしたが60以下でもOKです。
>>547
詳細な情報ありがとうございます。Excelの場合は注意します。
555デフォルトの名無しさん
垢版 |
2021/12/07(火) 18:18:33.97ID:gm0ARZfd
すみません、質問です。

SET hoge=hogehoge
robocopy c:\piyo \\server1\foge %hoge% /r:3 & if errorlevel 8 (
echoコマンド
exit /b 1
)

上記、
robocopy c:\piyo \\server1\foge %hoge%の「%hoge%」はどのような意味合いになりますでしょうか。
また、/r:3 & if errorlevel 8 ( の意味合いも教えていただけないでしょうか。

恐縮ですが、よろしくお願いいたします。
2021/12/07(火) 18:50:14.46ID:eGbAaLSQ
robocopy /?
でヘルプが出るのでそれを読め
2021/12/07(火) 18:52:54.40ID:eGbAaLSQ
なお&は命令の区切りだけど、別に手前の命令の結果を待っての動作じゃなくて
一行前までの結果で動作するんじゃなかったかな
2021/12/07(火) 19:03:57.81ID:8LJtCh3/
&はコマンドを繋げているだけ
その例だと
robocopy opt
if errorlevel 8 echoコマンド&exit /b 1
と同じ
c:\piyo \\server1\foge %hoge% /r:3
がrobocopyのコマンドラインオプション
%hoge%はhogehoge
set a=xyz
echo %a%
はecho xyzと解釈されxyzと出力される
各コマンドについてはコマンドプロンプトで以下
set /?
robocopy /?
if /?
2021/12/07(火) 19:21:14.44ID:eGbAaLSQ
>>558
>>557でも言ったけど、&は命令を並列に記述できるだけで
前の命令の結果を反映したものじゃないので
robocopy opt
if errorlevel 8 echoコマンド&exit /b 1

robocopy opt&if errorlevel 8 echoコマンド&exit /b 1
の結果は違ってくる
っていうかこれは意味の無い間違った使い方だね


set data=abc
set data=def&echo %data%
echo %data%

実行結果
abc
def
2021/12/07(火) 19:26:26.54ID:eGbAaLSQ
あれ違うのか
コマンドの場合は結果を見るんだな
環境変数が遅延するのか
2021/12/07(火) 19:34:45.64ID:8LJtCh3/
>>559
pushd .
if errorlevel 1 echo fail1
pushd a
if errorlevel 1 echo fail2
pushd .&if errorlevel 1 echo fail3
pushd a&if errorlevel 1 echo fail4
pause
試してから発言しなよ
2021/12/07(火) 19:38:07.87ID:eGbAaLSQ
実行時の行の展開の式評価に環境変数は展開されるってことだな
式評価に影響されないものはちゃんと実行される
&による命令の結合は
if errorlevel 1 は問題ないが
if %errorlevel% geq 1は問題がでてくる
563デフォルトの名無しさん
垢版 |
2021/12/07(火) 20:35:38.31ID:FGGdMnHs
皆さまありがとうございます

cmdにて コマンド /? で見られること知りませんでした
2021/12/08(水) 06:22:16.06ID:GPDURn2W
変数・条件判断など、ややこしいのは、PowerShell で作った方がよい
2021/12/08(水) 20:11:32.12ID:g8C6QNB9
普通に「勘違いしてました。ごめんなさい。」と言えんのか
2021/12/08(水) 20:18:14.77ID:CqDUxZrm
if errorlevel とか if defined って
& で繋ぐ為にあるんじゃね?
2021/12/08(水) 21:48:59.30ID:QG3j0cZG
バッチは罠が多すぎて&なんて横着しないからどうでもいい
2021/12/08(水) 22:49:45.89ID:CqDUxZrm
他にもifやdoの括弧のなかとか
2021/12/09(木) 10:08:38.60ID:FBbu4srV
次行に書いた方が見やすいしわざわざ&で繋ぐ意味なんてほぼ無いけど
robocopy & if errorlevel
としてるのは if errorlevel は直前のコマンドの errorlevel を評価するわけだから
「ココは直後である事に意味ありますよ。繋がっていますよ」をコード的に明示する為に次行では無く&で繋げて書いてあるんだと思う
2021/12/09(木) 13:59:42.09ID:3uIKfwyJ
&で繋ぐのは大抵そんな感じ
2021/12/09(木) 14:06:23.73ID:7XWC/XYC
行数を少なくしたい時しか使わんかなあ
まあ使うとしても
エラーかどうかだけチェックするときは、&&,||を使うといい
2021/12/09(木) 15:08:39.73ID:CZcGE7T9
>>571
> エラーかどうかだけチェックするときは、&&,||を使うといい

なるほど、一行でみやすくなる
2021/12/09(木) 15:58:31.58ID:y36UsJ/D
type "!TARGET_FILE!">>"!FILE_NAME!"で
テキストの中身を出力して
テキストファイルに出力するバッチファイルつくったんですけど
普段はうまく出力できたんですが

特定のファイルだけ
The system cannot find the file specified.
で中身が空になってしまいました

原因として考えられるのはなんでしょうか?
2021/12/09(木) 15:59:20.44ID:y36UsJ/D
中身が空というのは
本来は出力されるべきものが空になって出力された
ということです
わかりづらくてすいません
2021/12/09(木) 16:09:53.85ID:y36UsJ/D
自己解決です
ファイル名がおかしかったでした
すいません
2021/12/10(金) 09:23:54.32ID:E/xxr9cU
Windows10で、Chromeで特定の複数Webページを開くバッチファイルを作りたいと思ってます

cd /d "PATH_TO_CHROME"
"PATH_TO_CHROME\chrome.exe" "http://〇〇/〇〇"
"PATH_TO_CHROME\chrome.exe" "http://△△/△△"

このようにすると指定したChromeが起動し、指定したURLを開けるところまでは
できたのですが、これだと起動したChromeのタブを閉じないとバッチファイルが
先まないので、1サイトずつ開くことしかできません

しかし
cd /d "PATH_TO_CHROME"
start "PATH_TO_CHROME\chrome.exe" "http://〇〇/〇〇"
start "PATH_TO_CHROME\chrome.exe" "http://△△/△△"

このようにすると、ChromeではなくIE(既定のブラウザ)で起動してしまいます

対処法をお教えいただけますでしょうか
2021/12/10(金) 09:32:06.00ID:UVPMSOn+
srart /? 読めよ
定番の罠だぞ

start "タイトル" "コマンド"
2021/12/10(金) 09:43:17.11ID:B96qroJw
実行前にcdしてるんだから、startでPATH_TO_CHROME必要なくない?
2021/12/10(金) 09:55:28.09ID:E/xxr9cU
>>577
ご指摘ありがとうございます
コマンドがタイトルとなっているようですね

>>578
うまくいかず、いろいろ試行錯誤して残っておりますが、たしかに必要ないですね
ご指摘ありがとうございます
2021/12/10(金) 11:16:20.09ID:E/xxr9cU
576です

いただいた回答に基づき以下の様に修正し、うまく動作しました
ありがとうございました

cd /d "PATH_TO_CHROME"
start "" chrome.exe "http://〇〇/〇〇"
start "" chrome.exe "http://△△/△△"

タイトルは、どうしようか迷いましたが、消すとまた忘れて罠にハマるかと思い、
残しておきました
2021/12/10(金) 12:54:10.13ID:4x3UzFuB
chromeをdefault browserにする気は無かったのか?
2021/12/10(金) 13:46:43.89ID:xm+AV3Ci
これかー
https://github.com/MicrosoftDocs/windowsserverdocs/issues/4784

However the fact you need a Window Name is very annoying.

Typically we have used:
start /w "c:\path_name_here\filename.ext"
But all this does now is open another cmd prompt window with "c:\path_name_here\filename.ext" as it's title.

As a minimum, what is now required is this:
start "" /w "c:\path_name_here\filename.ext"

Why did this change??

まだopen question?闇深
2021/12/10(金) 13:58:58.96ID:bi0x6bK+
いちいちcdとかせんでもこれでよくね?
set chrome="フルパス\chrome.exe"
start "" %chrome% "http://〇〇/〇〇" "http://△△/△△"
タブに追加するだけならurlは羅列でいいはず
2021/12/10(金) 14:41:04.55ID:xm+AV3Ci
/オプション無しのオプショナル引数を先頭に持ってくるという設計は完全に腐ってるから、[<title>]から<title>への変更はグッジョブ

しかしアンドキュメンテッドはやめーや
2021/12/13(月) 10:32:27.87ID:iAh3rPLr
cmdの作業効率が8%向上する裏技

prompt $E[92;40m$P$_$G$S$E[0m
2021/12/13(月) 14:12:22.20ID:MDj1w4qb
ドキュメントしてしまうと公認してしまうから
2021/12/14(火) 01:14:44.64ID:74yCYCRP
>>567
行毎に一括でパラメタ展開はモジュール化に役立つよ
:: main
call :subtract %1 %2
call :add %1 %2
goto:eof

:subtract
setlocal
set a=%1
set b=%1
endlocal & set /a ret=%a%+%b%
exit /b

:: note that
:: "endlocal & set /a ret=a-b" wont work: no expansion at line-parsing
:: also
:: "endlocal"
:: "set /a a=%a%+%b%"
:: because local vars already popped.

:add
setlocal
set a=%1
set b=%2
endlocal & set /a ret=%a%-%b%
exit /b

ノーテストなんでなんか変だったらごめん
スマホアプリですぐ試せられればいいんだけど、プロプライエタリだからなあ…
2021/12/14(火) 01:20:33.98ID:74yCYCRP
大事なとこぬけてた
call :subr arg1 arg2
@echo %ret%
みたいに返り値得てます
2021/12/14(火) 13:12:42.88ID:0TpC/TXA
%time%で取得できる13:11:12.99を13111299に変換したい場合、変数を使って%time::=%、%_time:.=%として変換しています。
この文字列置換を複数条件設定するなど1行でスマートに置換させる方法はありませんか?
2021/12/14(火) 14:26:07.33ID:g9YcY7nV
>>589
>>538じゃ駄目なの?
2021/12/14(火) 15:16:40.00ID:0TpC/TXA
>>590
できました。ありがとうございます。
2021/12/15(水) 10:47:19.32ID:EP1qj6y9
>>538
すばらしい、一行でできるんだ、曲芸飛行
時間だけで5行かけていた
2021/12/15(水) 21:34:23.51ID:Ttj+NiJr
>>540の問題で痛い目を見るから俺は%date%%time%は使わない
2021/12/15(水) 22:26:24.88ID:EYSEHsUE
>>593
そこまで気にするなら、時刻が 0:00:00.xxの時は日付を取得し直すとかすればいいかな
又は一旦ダミーファイルを作成してそのタイムスタンプを見るとか
ちょっと具体的には思いつかないが日付時刻の付いた結果が出るシステム情報や結果ログ出力系のコマンドから貰うとか
bat中で別言語(WSH,PowerShell)で取得するとか(new Date();やget-date)
どういうのを使うと良いと言ってくれれば最高なレスになったのに
2021/12/16(木) 00:00:44.73ID:7XMchLit
通ぶりたいだけでしょw
2021/12/16(木) 21:17:59.55ID:/gSQ5d+p
これで満足かな
for /f "usebackq" %%a in (`powershell -nop "get-date -format 'yyyyMMddHHmmss'"`) do set now=%%a
2021/12/17(金) 14:42:24.69ID:BDVQn7Pa
:: タイムスタンプ取得。秒未満無し
copy nul $.txt
:: tokens はシステム設定の日付形式に依存。環境毎に要調整
for /f "tokens=2-4,6-8 delims=/: " %%a in ('where /t $.txt') do set "dt=%%a%%b%%c%%d%%e%%f"
del $.txt
set "dt=%dt: =0%"
echo %dt%
pause &exit /b

:: 怪しい時間帯(23:59:59-00:00:01)なら再取得。センチ秒(1/100)有り
:GET_DT
for /f "tokens=1-7 delims=/:." %%a in ("%date:~0,10%/%time: =0%") do set /a "d=%%a%%b%%c, t=1%%d%%e%%f%%g"
if %t% GTR 123595900 timeout /t 2 /nobreak >nul &goto :GET_DT
if %t% LSS 100000100 goto :GET_DT
echo %d%_%t:~1,-2%_%t:~-2%
pause &exit /b

別々に取得してるならまだしも同時に取得してそんな事故起こり得るの?都市伝説じゃね?
ところで"20211217143411"みたいな年月日時分秒を区切り文字無しの数字のみで表した形式って名前あるなら教えて欲しい
2021/12/17(金) 14:50:54.89ID:YK+z10uu
dateもtimeも参照する度に計算して返してるからありえなくはないはず
んなこと気にしだしたらやってらんないからまあ気にすんな
2021/12/17(金) 15:15:49.48ID:hTLZR6Rv
怪しい時間はスリープしてしまうのも手
決済の日付なんか微妙なの下手に振り分けたら揉めるしな、23:59で〆切でヨシ

そんなのbatでやってる人居るかはしらんが
2021/12/17(金) 17:15:52.28ID:U9ZWMMsm
>>597
日時ってデータとしては埋もれて目立たないから軽視されがちだけど
バッチでログ吐かせてY軸時間でグラフ出すような時にアッレッ!?ってなる
2021/12/17(金) 19:18:20.51ID:b/qKwgTk
:loop
set d=%date%
set t=%time%
if not %d%==%date% goto loop
2021/12/17(金) 20:24:45.70ID:HfuHDFo+
>>601
これだと、time取得した後で日付が変わる可能性がごくわずか考えられる
やっぱり時刻が0秒台かどうかで判定したほうがいいと思う
2021/12/17(金) 20:26:39.18ID:HfuHDFo+
いや別に変わっても大丈夫だな
2021/12/17(金) 21:03:18.69ID:BDVQn7Pa
>>601
あー同時に参照することばかり固執してたわ
敢えて順に取得して2度目との比較でTIMEの同日を保証出来るね
その方がシンプルで良いな
2021/12/18(土) 01:12:16.03ID:CB++7SQf
8ビットマイコンで16ビットタイマーの値を読むときなんかに使ったっけ
もちろんタイマー側にラッチ機能があって、そういう気遣いのいらないものもあったが
2021/12/21(火) 06:09:00.92ID:LxI3AD9t
ラッチがいるならつければええやん
607デフォルトの名無しさん
垢版 |
2021/12/24(金) 11:39:23.31ID:etjYYPj+
イベントログ保存したくて
wevtutil epl system xxx.evtx /q:"条件"

wevtutil al xxx.evtx /l:ja
でディレクトリ名が無効ですって出るんだが理由わかる?
608デフォルトの名無しさん
垢版 |
2021/12/24(金) 11:43:38.16ID:etjYYPj+
自己解決しました
管理者で実行したら行けた
2021/12/24(金) 20:51:05.94ID:wuqNqn+2
>>606
タイマーとかのラッチってペリフェラルの補助機能でしょ
ソフトでそんなもんないから>>601なわけで
2022/01/02(日) 19:41:59.70ID:llzVm8Ys
Windowsでバッチファイルの%1とかに
今クリップボードに入ってるテキストを渡して起動したいけど
なんか方法ある?
2022/01/02(日) 20:13:43.31ID:Wx5RR6tp
とりあえず何も追加する必要ないので PowerShell がお手軽

例えばクリップボードの内容を tmp.txt に出すならバッチファイルやコマンドプロンプトで
>powershell -NoProfile -ExecutionPolicy Unrestricted -Command Get-Clipboard > tmp.txt

先に
>chcp 65001
しておくと UTF8 での出力もいけるっぽい
2022/01/03(月) 02:27:56.29ID:/1+Dp4vp
for /f "delims=" %%a in ('powershell -c "get-clipboard"') do hoge.bat "%%~a"
2022/01/03(月) 07:54:20.63ID:yGzP40SI
>>611-612
powershellの1行呼び出しに-c or -Commandって必要ある?
いつもpowershell -nop "コマンド"てやってるわ
2022/01/03(月) 09:26:29.55ID:BdaWP45p
漏れは下のような、Ruby スクリプト内で、powershell コマンドを呼んで、
クリップボード内の文字列を処理している

# クリップボード内の複数行文字列の、各行の先頭・末尾から、
# 連続する空白類を除去して、クリップボードに入れる

str = `powershell Get-Clipboard`
str.encode! Encoding::UTF_8, Encoding::CP932 # UTF_8 へ変換

ary = str.each_line.map( &:strip ) # 連続する空白類を除去する

IO.popen( 'clip', 'w:cp932' ) do | clip | # CP932 へ戻す
clip.print( ary.join "\n" )
end
2022/01/03(月) 10:45:31.38ID:CWfpiD5B
>>613
この場合なら最低限で書くと
for /f "delims=" %%a in ('powershell get-clipboard') do
で良い
2022/01/03(月) 13:18:16.70ID:0LszXjQc
環境変数名に一部記号も使えることを発見
#で始まれば一時変数、$で始まればバッチ間共通など、少しわかりやすくできる
617デフォルトの名無しさん
垢版 |
2022/01/04(火) 00:14:37.12ID:a2P6Hn/H
塩野義製薬が週休3日制導入へ 来年4月、副業も解禁

塩野義製薬が「週休3日」選択可能に 給与は『週休2日の8割』副業や学び直しを支援

【フォーカス】サタケ/週休3日制 通年導入めざし夏季のみ試行中 交代制で水曜を休日に

旅館なのに週休3日!?陣屋・若女将の常識を覆した組織改革

“時代錯誤”から残業ゼロ、週休3日に! 鳥取の不動産会社が
レガシー企業からDX先進企業になれたワケ

ネクスウェイ、週休4日制・1日3時間勤務選択できる勤務体系を導入

日本初「週休4日制度」で、優秀な人材を採用するしくみとは? ?
ナレッジソサエティ久田社長に聞いてみた
2022/01/06(木) 07:53:54.89ID:JIskJ1L9
ファイルのリネームと
ファイルの移動
フォルダ自動作成
これだけで普段の作業の手間がほんとうに省ける
逆に何ができると便利だろう
2022/01/06(木) 08:04:00.41ID:JIskJ1L9
環境変数って
普通の変数とは違うの?
バッチファイル特有の言い回し?
%1
%i
%hoge
だっけ?
2022/01/06(木) 13:18:17.45ID:nDo7QbOD
アプリケーションプログラムの環境という意味
例えば一時作業フォルダを TEMP に指定するとアプリが参照して使ってくれる(事がある)
dirコマンドのデフォルトオプションはdircmd変数に設定出来る

いわゆる環境設定と呼ばれるね

そしてバッチファイル内でプログラミング言語の変数としても使える
2022/01/06(木) 13:23:22.58ID:nDo7QbOD
ちなみに %1 %%i は環境変数じゃないね
shift /? や for /? を読もう

環境変数はsetコマンドでセットして参照は%変数名%
set /? を読もう
2022/01/20(木) 04:31:27.84ID:a6a8bxfJ
最低限
for /f "delims=" %a in ('powershell clipboard') do echo %a
2022/01/25(火) 21:13:49.45ID:aASmTB60
dir /b の結果を explorerの名前順(昇順|降順)にソートする簡単な方法無い?
数字を数値と見做してソート
バッチから利用出来るならOK。ps全く分からんけど powershellとかで出来ないかな?
カレントディレクトリの dir /b 相当なら dirで無くてもいい
for /f "delims=" %%a in ('dir /b ^| numsort.exe') do
みたいな感じで外部ソートツール導入でもOK。むしろ理想形
ファイル数は2000未満くらい。万単位とか考慮しなくていい
なるべくなら余計なインストールは避けたいけど自前でパースとソート作るのはハードル高過ぎなので何か方法があれば教えて欲しい
最悪逆順にするだけなら自前でも出来そうなのでせめて(昇順|降順)どちらかだけでも出来れば
2022/01/25(火) 21:22:10.78ID:s4YEdFZn
>>623
dir /b の結果とexplorerの名前順(昇順|降順)って違うん?
もし同じなら、単に dir /b > uuu.txt でリダイレクト
2022/01/25(火) 21:28:36.67ID:OaU1XWUD
半角数字だけでいいなら GnuWin の sort.exe を gsort.exe にリネームして使ってる
http://gnuwin32.sourceforge.net/packages/coreutils.htm
の Binaries の zip に入ってるやつ


>dir /b *.txt | gsort -n
11.txt
0123.txt
2222.txt
3333.txt
11111.txt

>dir /b *.txt
0123.txt
11.txt
11111.txt
2222.txt
3333.txt

こんな具合
漢数字とかは知らないので日本語(漢数字・全角)に対応したの
あれば知りたい……
2022/01/25(火) 21:53:08.80ID:aASmTB60
>>625
ありがとう試してみます
2022/01/25(火) 21:59:16.95ID:s4YEdFZn
>>626
あんた数字を数値と見做すて言うたやん?
11.txt
11111.txt
2222.txt
になっていいわけ?
2022/01/25(火) 22:26:05.82ID:aASmTB60
>>625
教えてもらったようにgsort.exeにリネームして使ってみたら
libintl3.dll が見つからないため、コードの実行を続行できません。プログラムを再インストールすると、この問題が解決する可能性があります。
とアラート出て使えなかった。win10
libintl3.dllをググったらjp.dll-files.comてとこ検索出て落とせるようなんだけどこれ入れて大丈夫?
2022/01/25(火) 22:30:15.41ID:OaU1XWUD
>>627
落ち着いて
そこは比較のために出した素の 「dir /b 」 の結果ですよ

>>628
ごめんなさい
上のページの Binaries の下の Dependencies も要るんだった
2022/01/25(火) 23:14:16.23ID:aASmTB60
>>629
ありがとう
libをシステムにコピーして使えました
でもコレ
dir /b *.ext | gsort -n
1.txt
2.txt

9.txt
10.txt
と、数字.ext なら数値順にソート出来ましたけど
文字列+数字.ext だと無理なようです
xxx1.txt
xxx10.txt
xxx2.txt
xxx20.txt
みたいになります
xxx_1.txt と文字列と数字の間に区切り記号入れても駄目
エクスプローラーのようには並ばないみたいですね

win32api使うかvbかpowershellかで出来るような事を以前どこかで読んだ気がするのですがそのソースが見付けられない。。
2022/01/26(水) 01:07:47.03ID:td9ayUMw
普通に見つかったけど、本当に探した?
@echo off
echo class P{[System.Runtime.InteropServices.DllImport("shlwapi.dll", >SortLogical.cs
echo CharSet = System.Runtime.InteropServices.CharSet.Unicode, ExactSpelling = true)] >>SortLogical.cs
echo public static extern int StrCmpLogicalW(string str1, string str2); >>SortLogical.cs
echo static void Main(){ string[] lines = System.Console.In.ReadToEnd().Split >>SortLogical.cs
echo (new string[] { "\r\n" }, System.StringSplitOptions.RemoveEmptyEntries); >>SortLogical.cs
echo System.Array.Sort(lines, StrCmpLogicalW); >>SortLogical.cs
echo System.Console.Out.WriteLine(string.Join("\r\n",lines));}} >>SortLogical.cs
for /f %%i in ('dir /s /b "%windir%\Microsoft.NET\csc.exe"') do set csc="%%i"
%csc% /nologo SortLogical.cs
dir /b | SortLogical
2022/01/26(水) 04:18:02.04ID:aOgfZBdB
>>631
すげぇ。生成されたexeで希望するソートが出来るようになりました
マジ感謝です
ありがとう

> 本当に探した?
検索語すら分からず「バッチ dir エクスプローラー並び順」とか他にも結構色々試して探しては見たのですが。。
StrCmpLogicalW が分かった今でもその方法を見付けられていません
2022/01/26(水) 06:51:01.88ID:fC9okRVc
エクスプローラーの並び順って
辞書順か数字順か
レジストリで変更可能だよね
2022/01/26(水) 08:10:19.47ID:JawhZMcA
何のために並び順を揃えるの?
2022/01/26(水) 08:34:25.15ID:e2k0MxNT
なるほど、数字の部分だけは数値に変換してから、小さい順に並べるのか

このアルゴリズムを考えるのは、難しい
2022/01/26(水) 09:10:13.24ID:TX0OTodc
俺なら必要な桁分0パディングするなあ
連番ファイルをエクスプローラーで直接使うなんてことはないし
2022/01/26(水) 09:20:50.79ID:JawhZMcA
エクスプローラーで選択してパスのコピーでいいやん
2022/01/26(水) 11:52:52.47ID:+BcwC06P
>>635
スクリプトでやるなら正規表現などで数字部分を置換11→0000000011してからソートかな?
小数点以下ってどうなってたっけ?
でも記号 _ の並びまで違うから鬱陶しい
631のAPIはWin7には無いっぽいから需要はあるかもよ
2022/01/26(水) 12:06:15.68ID:+BcwC06P
あれ?XPから使えるのか…
あの外人許さん
2022/01/26(水) 12:08:29.20ID:JawhZMcA
A01BとA001Bが同じ評価になって順番どうするのとか思う
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況