将文件夹路径定义为变量的批处理脚本



我正在尝试编写一个小的批处理脚本,它将修改后的文件导入特定的Firefox配置文件文件夹。

问题是每个Firefox配置文件文件夹都有一个不同生成的名称 (例如:C:UsersUsernameAppDataRoamingMozillaFirefoxProfilesab1c2def.default(

由于我想使脚本在多台PC上运行,因此我无法对路径进行硬编码,因此我希望能够读取路径的最后一部分并将其用作变量,以便我可以将路径更改为所需的文件夹以删除和添加其中的文件。

这是我开始的代码:

REM turning echo off
@echo off
REM changing directory to Profiles Folder, behind it is the variable Folder.
cd %appdata%MozillaFirefoxProfiles
REM I wanna read the last Folder into a variable.
set userprofilefolder = Somehow read the folders behind Profiles
REM now I wanna change my directory into that one folder.
cd %appdata%MozillaFirefoxProfiles%userprofilefolder%
REM Here I am deleting the old "prefs.js" file in the Folder.
del prefs.js
REM now I change my Folderpath to where my modified "prefs.js" file lays.
cd pathwheremyprefs.jsfilelies
REM now I copy my fresh prefs.js" file into my Folder.
copy "prefs.js" "%appdata%MozillaFirefoxProfiles%userprofilefolder%"
REM Here I exit my .bat file.
exit

那么我该怎么做呢?

REM Turn echo off.
@echo off
REM Change directory to Firefox folder, this is where the profiles.ini file exist.
cd /d "%appdata%MozillaFirefox" || exit /b 1
REM Read profiles.ini and call :profiledir with the value of each path key found.
for /f "tokens=1* delims==" %%A in (profiles.ini) do (
if /i "%%~A" == "path" call :profiledir "%%~B"
)
exit /b
:profiledir
REM Set local environment. Any settings i.e cd will be temporary.
setlocal
REM Check if ".default" in path to continue.
echo "%~1"| find ".default" || exit /b 1
REM Change to the profile dir.
cd /d "%~1" || exit /b 1
REM Copy prefs.js to current dir.
echo copy /y "pathtomyprefs.js" "prefs.js"
exit /b

名为profiles.ini的文件包含配置文件文件夹的路径。 该文件采用 ini 格式,您可以找到每个路径键的路径值。

你可以有很多配置文件文件夹,所以我使用find ".default"以仅在文件夹包含该字符串时继续。

注意:

  • 如果路径是网络路径,则可能需要使用pushdpopd而不是cd.

操作说明

REM Change directory to Firefox folder, this is where the profiles.ini file exist.
cd /d "%appdata%MozillaFirefox" || exit /b 1

这将更改当前目录。||在右侧运行命令 如果左侧命令失败。如果失败,将以错误级别 1 退出。

注意:使用cd /?exit /?获取语法帮助。

REM Read profiles.ini and call :profiledir with the value of each path key found.
for /f "tokens=1* delims==" %%A in (profiles.ini) do (
if /i "%%~A" == "path" call :profiledir "%%~B"
)

for循环读取配置文件.ini文件。分隔符集=ini 文件用于将键与值分隔开来。令牌1将是 密钥放置在%%A而令牌*将是存储在%%B中的值。 如果键等于名为path的键,则调用名为:profiledir具有路径值的第一个参数,该参数应该是路径 到配置文件文件夹。

注意:使用for /?call /?获取语法帮助。

:profiledir

这就是所谓的标签。对标签的调用可以传递参数 便于传递路径之类的东西。参数 收到的格式为%1%2...%9.波浪号即%~1删除外部双引号。被叫标签返回给调用方 完成后。

REM Check if ".default" in path to continue.
echo "%~1"| find ".default" || exit /b 1

"%~1"是引用的第一个论点。它回显到find命令,如果 找到.default,它将继续。|被称为管道,其中 来自echo的 stdout 传递给find的 stdin。

注意:使用find /?获取语法帮助。

REM Change to the profile dir.
cd /d "%~1" || exit /b 1

与主代码相同cd只是它是本地设置的,因此仅以 in 结尾 被调用的标签。

REM Copy prefs.js to current dir.
echo copy /y "pathtomyprefs.js" "prefs.js"

copy/y参数允许在没有确认的情况下覆盖,因此del已经过时了。

注意:使用copy /?获取语法帮助。

最后:删除copy命令前面的echo如果满意它显示复制命令正常。

相关内容

  • 没有找到相关文章

最新更新