@@ -208,6 +208,39 @@ def _write_env_ps1(prefix: Path, uv_env: str, python_env: str, distro_version: s
208208 _ok ("env.ps1" )
209209
210210
211+ # ── env.bat ───────────────────────────────────────────────────────────────────
212+
213+ def _write_env_bat (prefix : Path , uv_env : str , python_env : str , distro_version : str ) -> None :
214+ if not _IS_WINDOWS :
215+ return
216+
217+ uv_exe = prefix / "uv.exe"
218+ venv_py = prefix / "venv" / "Scripts" / "python.exe"
219+ bin_dir = prefix / "bin"
220+
221+ add_to_path , notes = _path_decision (bin_dir )
222+
223+ lines : list [str ] = [
224+ f"@echo off" ,
225+ f":: managed-python v{ distro_version } -- generated by setup.py" ,
226+ ":: Do not edit manually; re-run install to regenerate" ,
227+ "" ,
228+ ":: Env vars (always set -- these are the reliable contract)" ,
229+ f'SET { uv_env } ={ uv_exe } ' ,
230+ f'SET { python_env } ={ venv_py } ' ,
231+ "" ,
232+ ]
233+
234+ if add_to_path :
235+ lines += [f":: { n } " for n in notes ]
236+ lines .append (f'SET PATH={ bin_dir } ;%PATH%' )
237+ else :
238+ lines += [f":: { n } " for n in notes ]
239+
240+ (prefix / "env.bat" ).write_text ("\r \n " .join (lines ) + "\r \n " , encoding = "utf-8" )
241+ _ok ("env.bat" )
242+
243+
211244# ── distro.toml ───────────────────────────────────────────────────────────────
212245
213246def _write_installed_distro_toml (
@@ -299,6 +332,7 @@ def main() -> None:
299332 _create_bin (prefix )
300333 _write_env_sh (prefix , args .uv_env , args .python_env , distro_version )
301334 _write_env_ps1 (prefix , args .uv_env , args .python_env , distro_version )
335+ _write_env_bat (prefix , args .uv_env , args .python_env , distro_version )
302336 _write_installed_distro_toml (
303337 script_dir , prefix , args .min_python , args .uv_env , args .python_env , args .shell_profile
304338 )
@@ -312,6 +346,7 @@ def main() -> None:
312346 print ()
313347 if _IS_WINDOWS :
314348 print (f' . "{ prefix / "env.ps1" } "' )
349+ print (f' or (if scripts are restricted): call "{ prefix / "env.bat" } "' )
315350 else :
316351 print (f' source "{ prefix / "env.sh" } "' )
317352 print ()
0 commit comments