将文件夹路径定义为变量的批处理脚本
Batch-Script defining Folderpath as Variable
我正在尝试编写一个小的批处理脚本,它将修改后的文件导入到特定的 Firefox 配置文件文件夹中。
问题是每个 Firefox 配置文件文件夹都有不同的生成名称
(例如:C:\Users\Username\AppData\Roaming\Mozilla\Firefox\Profiles\ab1c2def.default
)
由于我想让脚本在多台 PC 上运行,我无法对路径进行硬编码,所以我希望能够读取路径的最后一部分并将其用作变量,这样我就可以将路径更改为要在其中删除和添加文件的所需文件夹。
这是我开始时使用的代码:
REM turning echo off
@echo off
REM changing directory to \Profiles Folder, behind it is the variable Folder.
cd %appdata%\Mozilla\Firefox\Profiles
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%\Mozilla\Firefox\Profiles\%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 path\where\my\prefs.js\file\lies
REM now I copy my fresh prefs.js" file into my Folder.
copy "prefs.js" "%appdata%\Mozilla\Firefox\Profiles\%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%\Mozilla\Firefox" || 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 "path\to\my\prefs.js" "prefs.js"
exit /b
名为 profiles.ini
的文件包含配置文件文件夹的路径。
文件是ini格式,可以找到每个路径键的路径值。
你可以有很多个人资料文件夹,所以我使用 find ".default"
仅当文件夹包含该字符串时才继续。
注:
- 如果路径是网络路径,则可能需要使用
pushd
和 popd
而不是 cd
.
操作说明
REM Change directory to Firefox folder, this is where the profiles.ini file exist.
cd /d "%appdata%\Mozilla\Firefox" || 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
循环读取 profiles.ini 文件。分隔符集是 =
其中
ini 文件用于将键与值分隔开。令牌 1
将是
键放在 %%A
中,而令牌 *
将是存储在 %%B
中的值。
如果键等于名为 path
的键,则调用名为
:profiledir
路径值的第一个参数应该是路径
到个人资料文件夹。
注意:使用 for /?
和 call /?
获取语法帮助。
:profiledir
这是调用的标签。对标签的调用可以传递参数
方便传递诸如路径之类的东西。参数
收到的格式为 %1
、%2
... %9
。波浪号即 %~1
删除外部双引号。被叫标签 return 返回给调用者
完成后。
REM Check if ".default" in path to continue.
echo "%~1"| find ".default" || exit /b 1
"%~1"
是引用的第一个参数。它被回显到 find
命令,如果
找到.default
,则继续。 |
被称为管道,其中
来自 echo
的标准输出被传递到 find
.
的标准输入
注意:使用 find /?
获取语法帮助。
REM Change to the profile dir.
cd /d "%~1" || exit /b 1
与主要代码相同 cd
除了它是本地设置的所以只持续在
被叫标签。
REM Copy prefs.js to current dir.
echo copy /y "path\to\my\prefs.js" "prefs.js"
copy
的 /y
参数允许在不确认的情况下覆盖,因此
del
已过时。
注意:使用 copy /?
获取语法帮助。
最后:删除copy
命令前面的echo
如果满意说明复制命令OK
我正在尝试编写一个小的批处理脚本,它将修改后的文件导入到特定的 Firefox 配置文件文件夹中。
问题是每个 Firefox 配置文件文件夹都有不同的生成名称
(例如:C:\Users\Username\AppData\Roaming\Mozilla\Firefox\Profiles\ab1c2def.default
)
由于我想让脚本在多台 PC 上运行,我无法对路径进行硬编码,所以我希望能够读取路径的最后一部分并将其用作变量,这样我就可以将路径更改为要在其中删除和添加文件的所需文件夹。
这是我开始时使用的代码:
REM turning echo off
@echo off
REM changing directory to \Profiles Folder, behind it is the variable Folder.
cd %appdata%\Mozilla\Firefox\Profiles
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%\Mozilla\Firefox\Profiles\%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 path\where\my\prefs.js\file\lies
REM now I copy my fresh prefs.js" file into my Folder.
copy "prefs.js" "%appdata%\Mozilla\Firefox\Profiles\%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%\Mozilla\Firefox" || 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 "path\to\my\prefs.js" "prefs.js"
exit /b
名为 profiles.ini
的文件包含配置文件文件夹的路径。
文件是ini格式,可以找到每个路径键的路径值。
你可以有很多个人资料文件夹,所以我使用 find ".default"
仅当文件夹包含该字符串时才继续。
注:
- 如果路径是网络路径,则可能需要使用
pushd
和popd
而不是cd
.
操作说明
REM Change directory to Firefox folder, this is where the profiles.ini file exist.
cd /d "%appdata%\Mozilla\Firefox" || 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
循环读取 profiles.ini 文件。分隔符集是 =
其中
ini 文件用于将键与值分隔开。令牌 1
将是
键放在 %%A
中,而令牌 *
将是存储在 %%B
中的值。
如果键等于名为 path
的键,则调用名为
:profiledir
路径值的第一个参数应该是路径
到个人资料文件夹。
注意:使用 for /?
和 call /?
获取语法帮助。
:profiledir
这是调用的标签。对标签的调用可以传递参数
方便传递诸如路径之类的东西。参数
收到的格式为 %1
、%2
... %9
。波浪号即 %~1
删除外部双引号。被叫标签 return 返回给调用者
完成后。
REM Check if ".default" in path to continue.
echo "%~1"| find ".default" || exit /b 1
"%~1"
是引用的第一个参数。它被回显到 find
命令,如果
找到.default
,则继续。 |
被称为管道,其中
来自 echo
的标准输出被传递到 find
.
注意:使用 find /?
获取语法帮助。
REM Change to the profile dir.
cd /d "%~1" || exit /b 1
与主要代码相同 cd
除了它是本地设置的所以只持续在
被叫标签。
REM Copy prefs.js to current dir.
echo copy /y "path\to\my\prefs.js" "prefs.js"
copy
的 /y
参数允许在不确认的情况下覆盖,因此
del
已过时。
注意:使用 copy /?
获取语法帮助。
最后:删除copy
命令前面的echo
如果满意说明复制命令OK