【.cmd】 バッチファイルスクリプト %15 【.bat】 (907レス)
上下前次1-新
抽出解除 レス栞
128(3): デフォルトの名無しさん [sage] 2023/01/03(火) 15:27:36.49 ID:VP4Ca8Qj(1) AAS
勝手な想像だけどgoto関数かラベルの次の行がカッコになってるパターンだと思う
goto :AAA
)
とか
:AAA
)
バッチファイルは実行時に1行になって解釈されるからこういう書き方だと例えば
else (goto :AAA)
となって閉じ括弧までがラベルの一部と解釈される
簡単な回避策としては括弧の前の行にremを挿入する
171(3): デフォルトの名無しさん [sage] 2023/02/15(水) 21:53:53.82 ID:2801FI6C(1) AAS
dir あいう!えお.txt → 確認OK
for %%i in ( dir ”*.txt” ) do (
echo ”%%~nxi” →❶
dir ”%%~nxi” →➋
)
❶→あいうえお.txt
➋→ファイル無し
この問題(for文の内部で半角!文字が含まれたファイル名で、!が消えた名前に変わってしまう)の回避方法をご教示いただければ幸いです。
(「あいう!えお.txt」のファイル有りきで…)
329(3): デフォルトの名無しさん [sage] 2023/06/13(火) 11:28:39.90 ID:v41Gwse2(2/2) AAS
>>328328(2): デフォルトの名無しさん [sage] 2023/06/13(火) 11:10:48.21 ID:RNzu8ICZ(5/5) AAS
>>327
そうなんですねorz
その辺ググっても取っ散らかってて情報が・・・なんかもう・・・ごめん
Batファイルはファイルの移動・コピー・フォルダ一括作成・formatくらいしか使ったことなくてねorz
エクスプローラでファイル名検索→複数のBatファイルとかやってるのすら面倒になったところなんだが
堪能に使えるプログラム言語はないのでもうしょうがないかなorz
こんな感じでいいのでは?
:loop
set fname=%~1
shift
if not defined fname goto :eof
if "%fname:~0,2%" equ "ac" "c:\cov.exe" ~
if "%fname:~0,2%" equ "au" "c:\auro.exe" ~
timeout 1
goto :loop
又は
if "%fname:ac=%" neq "%fname%" "c:\cov.exe" ~
556(3): デフォルトの名無しさん [sage] 2024/06/20(木) 06:56:43.32 ID:oAthcLJ7(1) AAS
私が普段使っているドラッグアンドドロップ用バッチのサンプルです
@echo off & set a="%cmdcmdline:"=%"& set "arg="
for /f "tokens=3* delims=:" %%i in (%a%) do (set a=%%i& set b=%%j)
set "a=%a:~-1%" & set b="%b::=" "%"
for %%i in (%b%) do set b=%%i& call :x
goto y
:x
if defined arg set arg=%arg:~0,-3%"
set arg=%arg% "%a%:%b:~1%& exit /b
:y
echo コマンド %arg%
pause & exit
581(4): デフォルトの名無しさん [sage] 2024/11/07(木) 12:14:54.61 ID:9xnRXsv4(1) AAS
>>580580(1): デフォルトの名無しさん [] 2024/11/07(木) 11:01:23.05 ID:5OQwBO7R(1/2) AAS
batファイルで=を含む置換えの時の方法教えてください。
入力は Hello World 12=34
@echo off
set /p mystringA=あいさつ:
set mystringB=%mystringA:12=34=4567%
echo %mystringB%
結果をこのようにしたい
Hello World 4567
batだけでやるには大変(=の置換は無理)
変換前に1文字ずつ判定して=だったら普通使われない文字(=とか)に変えるとかしないとできない
別の方法としては別の言語でサポートしてやれば楽
@if (0)==(0) echo off
rem *** このブロックにbat内容を記述する
set s=Hello World 12=34
cscript //nologo /e:jscript "%~f0" "%s%"
rem for /f "tokens=*" %%i in ('cscript //nologo /e:jscript "%~f0" "%s%"') do set s=%%i
rem echo %s%
goto :eof
rem ***
@end
//これ以降はjscriptの処理部
var data=WScript.Arguments(0).replace(/12=34/g,"4567");
WScript.StdOut.WriteLine(data);
627(5): デフォルトの名無しさん [] 2024/11/14(木) 11:47:50.65 ID:oC8TllJp(1/5) AAS
@echo off
set T=%tmp%\tmp.txt
type nul>%T%
for %%f in (%*) do (
>>%tmp%\tmp.txt echo %%~nxf
)
type %T% | clip
これだと正常に取得できません
正常にファイル名を取得できるようにするにはどう書けばいいでしょうか?
692(3): デフォルトの名無しさん [sage] 2025/04/19(土) 00:45:06.61 ID:pkdgLcU5(1) AAS
set str=aaa "dd d"
echo echo1 %str%
echo echo2 "%str%"
call :callecho "%str%"
pause
goto :EOF
:callecho
echo echo3 %1
echo echo4 %~1
echo echo5 %2
echo echo6 %~2
exit /b
二重引用符括ったものを入れ子の構造と認識していない様子
"%str%"で一つの引数とするためには、どのようにエスケープすればいい?
714(4): デフォルトの名無しさん [] 2025/05/26(月) 00:46:53.22 ID:sddMzjz1(1/2) AAS
>>556
かなり前の書き込みなので もう見ていないかもしれないけど
使わせてもらいました ありがとうございます
初心者なので理解するのに時間がかかってしまいましたが
これで欠点が一つ克服できました
715(6): デフォルトの名無しさん [sage] 2025/05/26(月) 08:47:40.30 ID:iONSO6k9(1) AAS
>>714
それでもいいけど最近シンプルなのに書き換えたので参考にどうぞ
ドラッグアンドドロップ用バッチのサンプル
@echo off & set arg=& set a="%cmdcmdline:"=" "%"
set a=%a:""=%& call :x %%a:*%~x0" =%%
echo コマンド %arg%
pause & exit
:x
set a=%1& if not defined a exit /b
if "%a:~1,1%"==" " set a=%a: =" "%
set arg=%arg% %a:""=%& shift & goto x
718(4): 714 [] 2025/06/09(月) 23:42:00.02 ID:XIEmLRR3(1) AAS
>>556,715
2つを参考にして作ってみました
ドラッグ アンド ドロップ用
@echo off & set a="%cmdcmdline:"=%"
for /f "tokens=3* delims=:" %%i in (%a%) do (set a=%%i& set b=%%j)
set "a=%a:~-1%"
call :x "%a%:%%b: %a%:=" "%a%:%%"
:x
echo コマンド %*
pause & exit
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.067s