如何在Cmd/Bat文件中将父目录存为变量适配可变盘符SD卡
适配任意盘符的Windows批处理脚本及Steam Deck Linux兼容方案
Windows 脚本修改
核心思路是使用相对脚本所在位置的路径替代固定盘符路径,利用批处理内置变量%~dp0获取脚本自身的绝对路径(包含盘符和末尾反斜杠),以此为基准定位所有文件。
修改后的 3DS.cmd
@echo off echo Keeping Window Active for GOG Time Tracking :: 获取脚本所在的绝对路径(自动适配当前盘符) set "SCRIPT_DIR=%~dp0" :: 切换到RetroArch程序目录 cd "%SCRIPT_DIR%Games\RetroArch\" :: 启动RetroArch并加载指定核心与ROM "retroarch.exe" -L "cores\citra_libretro.dll" %1 -f
修改后的 Animal Crossing New Leaf.cmd
@echo off :: 获取脚本所在的绝对路径 set "SCRIPT_DIR=%~dp0" :: 调用3DS.cmd并传入ROM的绝对路径(基于脚本位置自动生成) call "3DS.cmd" "%SCRIPT_DIR%Games\Nintendo\3DS\Games\Animal Crossing New Leaf.3ds"
Linux Steam Deck 兼容方案
Steam Deck使用Linux系统,需编写Shell脚本替代批处理,逻辑与Windows一致,通过realpath和dirname获取脚本所在绝对路径。
创建 3DS.sh
#!/bin/bash echo "Keeping Window Active for GOG Time Tracking" # 获取脚本所在的绝对路径 SCRIPT_DIR=$(dirname "$(realpath "$0")") # 切换到RetroArch目录 cd "$SCRIPT_DIR/Games/RetroArch/" # 启动RetroArch(Linux下核心文件后缀为.so) ./retroarch -L cores/citra_libretro.so "$1" -f
创建 Animal Crossing New Leaf.sh
#!/bin/bash # 获取脚本所在的绝对路径 SCRIPT_DIR=$(dirname "$(realpath "$0")") # 调用3DS.sh并传入ROM路径 ./3DS.sh "$SCRIPT_DIR/Games/Nintendo/3DS/Games/Animal Crossing New Leaf.3ds"
权限设置
创建完成后,需给Shell脚本添加可执行权限:
chmod +x 3DS.sh "Animal Crossing New Leaf.sh"
关键说明
- Windows下
%~dp0:直接返回脚本文件所在的完整绝对路径(如SD卡盘符为D:\时,脚本在根目录则返回D:\),无需手动指定盘符。 - Linux下
realpath "$0":获取脚本的绝对路径,再通过dirname提取目录部分,确保路径不受当前工作目录影响。 - 所有文件路径均基于脚本位置的相对路径构建,无论SD卡挂载到哪个盘符/路径,都能正确定位程序和ROM文件。
内容的提问来源于stack exchange,提问作者adamcapjones
相关产品推荐
相关产品推荐

