D&Dやめて日付順のリストファイルを作成したらどうかね
エクスプローラーとメモ帳で簡単にできるでしょ ドラッグアンドドロップなんてバッチ処理の発想じゃねえなw Ruby で作ってみた。
Rubyでは半角空白はエラーになるけど、全角空白は正常に動く
デスクトップにショートカットを作って、
それに対して、ファイルをdrag & drop する
ショートカットのリンク先は、
C:\Windows\System32\cmd@.exe /k "ruby C:/Users/Owner/Documents/script.rb"
(@は取り除いて下さい)
require 'fileutils'
Sep = '-' * 40 + "\n" # separator
# ファイル作成日時の古い順から処理する。
# ただし、File.(stat.)birthtime は、Linux では使えない
ARGV.select { |full_path| File.file?( full_path ) }# ファイルのみ
.sort_by{ |full_path| File.birthtime( full_path ) }
.each do |full_path|
puts Sep + full_path
p birthtime = File.birthtime( full_path )
# ここに処理を書く
end
sleep # 出力したコマンドプロンプト画面を閉じないようにする バッチファイルでちまちま文字列処理するのは
C言語でちまちま文字列処理するくらい不毛だからやめとけ 私が普段使っているドラッグアンドドロップ用バッチのサンプルです
@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 PowerShellて別の文字でエラーになるとか聞いたけど本当? net session /delete の後の2回のY/N選択をコマンドで自動入力したいんだけど、どうやればいいの? >>558
応答ファイル(y+CR/LF, n+CR/LF)を作ってそれを入力とするのが常套手段だが
●Y/Nが1回の場合の例
rem ***準備
mkdir 111 2>nul
echo.>111\1.txt
rem ***応答ファイル作成
echo n>n.txt
echo y>y.txt
del Z:\111\*.*<n.txt >nul 2>&1
2回とのことなので、
echo n>n_n.txt
echo n>>n_n.txt
とするといけるかも(実行してないので結果不明) 初心者質問ですみません。ffmpegで一括再エンコードしたいと思ってバッチファイルを作ってみたのですがファイルにスペースが含まれるとエラーが出るようで困っています。どのように対処すればよいか、どなたか御教示お願い出来ませんでしょうか?
@echo off
cd /d %~dp0
for %%a in (*.mp4) do (
"C:\ffmpeg\bin\ffmpeg.exe" -i %%a -b:v 500k -c:a copy %%~na_500k.mp4
)
pause >>561
引数として渡されるファイル名にスペースがある場合?
それなら引数を”で囲めば行けるんじゃね? 有難うございます。引数を""で囲んだら上手くいきました。 別のスレでも質問させていただいているのですが、こちらの方が適切かと思い投稿させていただきます。
以下をbatファイルで動かそうとしてもうまく動かないのですが、どうしたら良いでしょうか。
batファイルをダブルクリックして、PowerShellを実行しています。
PowerShellのスクリプト部分は、PowerShellで動くことを確認済です。
ランダムパスワードを生成する感じです。
https://chatgpt.com/...05-98e7-18f01918f140 以下を消したら動くようになりました。
解決です。
Param(
[int]$Length = 16,
[switch]$IncludeUppercase,
[switch]$IncludeLowercase,
[switch]$IncludeNumbers,
[switch]$IncludeSymbols
) iris-microという便利なソフトつかって 画面明るさ色温度かえてます
バッチファイルが2種類あって この設定をきりかえつかっています
ふたつのバッチファイルを 交互に繰り返すようなスクリプト作れますか
プロセスがのこったりしてるようでもないので難しいでしょうか? バッチを順番に呼び出して先頭にgotoすれば交互になるような気がします 同じbatで起動するたびにサイクリックに実行する内容を切り替えるって意味じゃないかな
何か外部にフラグみたいなもの(又は実行用にbatをコピーしてそれを呼び出す)を用意するといいんじゃないかな
同時起動の排他制御とかは個人使用ならまあ不要だろう 状態を持たせたいならバッチの名前を変えるという荒業もできるね 自分自身の名前は変えられないので別ファイルを用意
そもそもbat名を変えたら起動の度に別bat名で起動することになり元々の2つのbatのある状態と変わらんじゃん echo.>stat_on
if exist stat_on
とかでチェック用ファイルで分岐するのが手っ取り早い
より汎用的にやるなら
inifile.exeみたいの作るか拾うかして状態を読み書きする winPCで
エクスプローラから
複数ファイルを
バッチファイルにドロップして
拡張子付きファイル名のみ(パスなし)を
1行1ファイル名で
list.txtに書き出したい
どの様に? >>575
@echo off & chcp 65001
set a="%cmdcmdline:"=" "%"
call :x > list.txt & exit
:x
set a=%a:*.bat" =%
for %%i in (%a:""=%) do set a=%%i& call :y
exit /b
:y
if "%a:~1,1%"==" " set a=%a: =" "%
for %%i in (%a:""=%) do echo %%~nxi
list.txt は UTF-8 にしてみた
バッチの拡張子は .bat まずは特定のフォルダにファイルを集めるという発想がないんだろうな batファイルで=を含む置換えの時の方法教えてください。
入力は Hello World 12=34
@echo off
set /p mystringA=あいさつ:
set mystringB=%mystringA:12=34=4567%
echo %mystringB%
結果をこのようにしたい
Hello World 4567 >>580
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); >>581
サイトによって特殊文字は^だったり"を使ったりで試して出来なかった
代案をわざわざありがとうございます^^ >>577
神様ありがとう
なんでかわからないけど動きました
list. txtを%USERPROFILE%\Desktopに作成するにはどのようにすれば?
単純に
"%USERPROFILE\Desktop\list.txt"
に変更してもダメでした エクスプローラーで「パスのコピー」あるの知ってる?
windows11 なら選択後に shift+ctrl+c
バッチとかいらんだろ >>577
>583
今やったらできました
お騒がせしました
もしよろしければ
解説お願いします del /q "C:\Users\%username%\Desktop\新しいフォルダー"
これで新しいフォルダー内が消えないのですが? rdコマンドで親フォルダを削除しないようにするにはどう書けば良いのでしょうか? rdコマンドで無理なら対象のフォルダ以下にあるファイルやフォルダを全て削除するものでもかまいません。 フォルダーごと削除してから新規作成したほうが簡単じゃね 俺の環境だと
>>586
で消えるけど、/q付けないでやったらファイル削除確認メッセージが出てるか?
出てないなら中身のファイルの属性が隠しファイルになってるとか del /q "新しいフォルダー\*"
for /d %%i in ("新しいフォルダー\*") do rd /s /q "%%~i" cd "新しいフォルダー" && 2> nul rd /s /q . >>581
またつまづきました><
入力 12&encoding=se34 56=78
これで&encoding=seを削除したくて
set "s=%s:^&=%"
で&を通したんですが
'encoding'は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチファイルとして認識されません。
となって出来ないです
set "s=%s:^encoding=%"
data = data.replace(/&encoding=se/g, "");
のように加えてもダメでした
どうすればいいですか? バッチでjscriptに渡す前に&が解釈されてるのかな?知らんけど
できないです、どうすればいいですかではなく
どこでエラーになってるか突き止めるのが先なのと
文字列処理したいなら違う言語例えばjscriptを覚えた方がよいかと jscriptは
>>581
のようにOS標準で入ってる古いjavascript
最近の構文は一部使えないがバッチよりも動作が高速で正規表現など文字列処理にも適している
他にpowershellもある