【.cmd】 バッチファイルスクリプト %15 【.bat】 (819レス)
1-

224: 2023/03/10(金)03:09 ID:dbCMTPvQ(1) AAS
チラシの裏で
225
(1): 2023/03/10(金)17:32 ID:eGLVllnw(1/2) AAS
散々コマンドリファレンスを読んだりググったけど分からないことを教えてください。

type data.txt | hoge.bat
みたいな事がしたいのですが、バッチスクリプトで、
・bash での read line
・VBScript での WScript.StdIn.ReadLine
のように、1行ずつ標準入力を読むことは可能でしょうか?やっぱり駄目でしょうか?
226
(1): 2023/03/10(金)18:36 ID:3mB0yP28(1) AAS
for /F
227
(1): 2023/03/10(金)18:44 ID:KiwyNmEo(1) AAS
何がやっぱりなのかわからん
もっとちゃんとググれ
228: 2023/03/10(金)19:12 ID:eGLVllnw(2/2) AAS
>>226
ヒントありがとう。for の中であのコマンドを使うんか…。

>>227
上から目線のジジイはすっこんでろ。
どうせ分かんないんだろ。
ということで正解はここには書かん
229: 2023/03/10(金)19:31 ID:hNo+M64i(1) AAS
要するに見ての通り他のコマンドからパイプで渡された標準入力をバッチファイルで受け取りたいと言う事でしょ
無理なんじゃね
230: 2023/03/10(金)19:46 ID:vz26ACYY(1) AAS
やっぱり(予想通り・諦め・失望)
231: 2023/03/10(金)20:58 ID:c3BQ1P8m(1/4) AAS
こんなのでもいいかな?
@echo off
set lines=0
for /f "tokens=*" %%i in ('more') do (
set data=%%i
call :sub
)
goto :eof
:sub
set /a lines+=1
echo %lines% - %data%
232: 2023/03/10(金)21:03 ID:c3BQ1P8m(2/4) AAS
もちろん
forループの特性上、空白行はスキップされたりいろいろするので
finsdtrと組み合わせたり色々しないといけないけど
過去ログにその話はあったかと
233: 2023/03/10(金)21:21 ID:c3BQ1P8m(3/4) AAS
一応表示は""で括ったほうがいいかな
データ内容次第ではエラーとか色々起きるんで
234: 2023/03/10(金)21:27 ID:c3BQ1P8m(4/4) AAS
バッチの入力データ次第という奴はどうしようもないことは以前から何度もレスされてる
""で括ってもダメで遅延環境変数で出力するのが一番まともかも
完全ではないだろうけど
235: 2023/03/18(土)01:36 ID:iEi+ABmN(1) AAS
フォーいーちないのか?
236: 2023/04/13(木)18:51 ID:dCQIGdp/(1) AAS
>>225
bing のチャットAIに丸投げしてみた

バッチスクリプトで標準入力を1行ずつ読む方法については、以下のような方法があります¹⁴。
- `for /f %%[アルファベット1文字] in ([ファイル名]) do ([処理])` を使う方法
- `set /p 変数名=` を使う方法

例えば、以下のようなバッチスクリプトで、data.txt の内容を hoge.bat に渡すことができます。
```
@echo off
for /f %%a in (data.txt) do (
echo %%a | hoge.bat
)
```
上記の例では、data.txt の内容を1行ずつ読み込み、hoge.bat に渡しています。¹
237: 2023/04/14(金)12:47 ID:ITYRpePX(1) AAS
質問は受け側のバッチの内容だろ
送り側でfor文にする意味不明
238: 2023/04/14(金)13:02 ID:twidN+O+(1) AAS
処理対象がconioだった名残がたまたま残ってただけで
バッチ自体に標準入力という概念は無さそう
239
(1): 2023/04/16(日)15:03 ID:OSGOKcik(1) AAS
ループ処理やif分でもカッコ内の変数スコープがおかしくなるのはどういう原理なんです?
240: 2023/04/16(日)15:21 ID:j/ssGNNl(1/4) AAS
実行する行の解釈の後に実行されるから
この行の解釈は(から)までは1行として一気に解釈される
つまり括弧の中の代入文があったとしても実行前の解釈の時点で(その時点の値で)展開されてしまう
241: 2023/04/16(日)15:36 ID:j/ssGNNl(2/4) AAS
>>239
set /?
に詳しい説明があるので読んでみること
242: 2023/04/16(日)16:30 ID:zYIf7I3E(1) AAS
なにをやってスコープがおかしくなったのか具体例を上げてくれないとなんとも言えないな
243: 2023/04/16(日)16:43 ID:j/ssGNNl(3/4) AAS
いやだからスコープなんて高級な概念は存在しないんだけど
244: 2023/04/16(日)16:45 ID:Dywad+WI(1) AAS
バッチファイルの言語仕様はウンコすぎるから
if ... call :foo "%~1"
for ... call :foo "%%~i"
とかやっといた方がミスが少ない
245: 2023/04/16(日)16:45 ID:j/ssGNNl(4/4) AAS
いやsetlocalがあったか
でもそれを使ってるんならまず自分のやってることは認識してるはずなんだが
246
(1): 2023/04/18(火)09:44 ID:N1MfEhNS(1) AAS
ファイルディスクリプタの1(標準出力)と3を同時にリダイレクトすると
以降プロンプトや標準出力が表示されなくなるのはなぜでしょう?
ハング等ではなく表示されないだけで、cmdとの対話モードは続いているようです。

C:\> dir >nul 3>nul
dir  ←表示されない
dir >&2  ←表示される
winver  ←起動する
247
(1): 2023/04/19(水)22:45 ID:UrhLKEvZ(1) AAS
win11 64bitの環境でどのようなフォルダを開いても
最初からファイルの並びや表示を↓のようにしたいです。
●●●●●●●●●●●
表示は「一覧」
並び替えは「名前」で「昇順」
グループで表示は「なし」
●●●●●●●●●●●
クリーンインストール直後でもbatファイルで一発で
出来るようなの教えてください
248: 2023/04/20(木)22:07 ID:dJqrvGvM(1) AAS
クリーンインストールでやる場合はISOイメージをカスタマイズする必要あると思うし
このスレの範疇をだいぶ超えてるような気がする
ひょっとすると外人ならbatファイル一発でやる「技」を持ってるかもしれないね
249
(1): 2023/04/21(金)08:48 ID:TBBX4m6H(1/2) AAS
>>246
ようわからんなこれ。
標準出力の向き先が3番に切り替わってる。
4番もリダイレクトすると標準エラー出力も切り替わりっぱなしになる。

バグ利用?だけどこれ利用するとデフォルトでログ出力できるな。
echo onだとプロンプトまで記録できる。

●【バッチ】**************************
@type nul 1>nul 2>nul 3>"%~f0.log" 4>&3
echo 処理開始
ver
cd aaa
echo 処理終了
@exit /b
●【画面】****************************
処理終了
続行するには何かキーを押してください . . .
●【ログ】****************************
C:\>echo 処理開始
処理開始

C:\>ver
Microsoft Windows [Version 10.0.19044.2846]

C:\>cd aaa
指定されたパスが見つかりません。

C:\>echo 処理終了
処理終了
250: 2023/04/21(金)08:53 ID:TBBX4m6H(2/2) AAS
>>249
改行数制限に引っかかって修正した時にバッチ内容間違えた。

@type nul 1>nul 2>nul 3>"%~f0.log" 4>&3
echo 処理開始
ver
cd aaa
echo 処理終了
@echo 処理終了 >&3 & pause >&3
@exit /b
251: 2023/04/24(月)17:00 ID:oDKRGmAI(1) AAS
>>247
その設定にするレジストリ教えて
252
(1): 2023/04/26(水)22:20 ID:MVyBKPQf(1/3) AAS
---------------
@echo off
set "parent_directories=tamachi omiya"
set "sub_directories=0001 0002 0010"
setlocal enabledelayedexpansion
for %%P in (%parent_directories%) do (
for %%S in (%sub_directories%) do (
set "combined_directory=%%P%%S"
echo RewriteEngine On > !combined_directory!.htaccess
echo RewriteBase /%%P/%%S/ >> !combined_directory!.htaccess
echo. >> !combined_directory!.htaccess
echo # Redirect only short URLs >> !combined_directory!.htaccess
echo RewriteCond %%{REQUEST_FILENAME} !-f >> !combined_directory!.htaccess
echo RewriteCond %%{REQUEST_FILENAME} !-d >> !combined_directory!.htaccess
echo RewriteRule ^^(.+)$ htdocs/$1 [L] >> !combined_directory!.htaccess
)
)
上記のようなコマンドのバッチを作った。
バッチを叩くと以下のようなhtaccessをfor分だけ出力させたい。
しかし、$文字のために、バッチがすすまない。$$としてエスケープ試してみるもできなかった。
良きアイデアないだろうか?
---------------
【tamachi0001.htaccess】

RewriteEngine On
RewriteBase /tamachi/0001/

# Redirect only short URLs
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ htdocs/$1 [L]
253
(1): 2023/04/26(水)22:46 ID:UfBGheQ3(1) AAS
>>252
$の前の)がdoの閉じカッコになっちゃってる
echo RewriteRule ^^(.+^)$ htdocs/$1 [L] >> !combined_directory!.htaccess
1-
あと 566 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ

ぬこの手 ぬこTOP 0.016s