mirror of
https://github.com/bin456789/reinstall.git
synced 2025-06-07 21:09:56 +00:00
dd: 修复部分镜像系统文件大小写不同导致报错
This commit is contained in:
parent
5409cecbcb
commit
f4e497883f
6
trans.sh
6
trans.sh
@ -2843,9 +2843,9 @@ modify_windows() {
|
|||||||
|
|
||||||
if $use_gpo; then
|
if $use_gpo; then
|
||||||
# 使用组策略
|
# 使用组策略
|
||||||
gpt_ini=$os_dir/Windows/System32/GroupPolicy/gpt.ini
|
scripts_ini=$(get_path_in_correct_case $os_dir/Windows/System32/GroupPolicy/Machine/Scripts/scripts.ini)
|
||||||
scripts_ini=$os_dir/Windows/System32/GroupPolicy/Machine/Scripts/scripts.ini
|
|
||||||
mkdir -p "$(dirname $scripts_ini)"
|
mkdir -p "$(dirname $scripts_ini)"
|
||||||
|
gpt_ini=$(get_path_in_correct_case $os_dir/Windows/System32/GroupPolicy/gpt.ini)
|
||||||
|
|
||||||
# 备份 ini
|
# 备份 ini
|
||||||
for file in $gpt_ini $scripts_ini; do
|
for file in $gpt_ini $scripts_ini; do
|
||||||
@ -2892,7 +2892,7 @@ EOF
|
|||||||
download $confhome/windows-del-gpo.bat $os_dir/windows-del-gpo.bat
|
download $confhome/windows-del-gpo.bat $os_dir/windows-del-gpo.bat
|
||||||
else
|
else
|
||||||
# 使用 SetupComplete
|
# 使用 SetupComplete
|
||||||
setup_complete=$os_dir/Windows/Setup/Scripts/SetupComplete.cmd
|
setup_complete=$(get_path_in_correct_case $os_dir/Windows/Setup/Scripts/SetupComplete.cmd)
|
||||||
mkdir -p "$(dirname $setup_complete)"
|
mkdir -p "$(dirname $setup_complete)"
|
||||||
|
|
||||||
# 添加到 C:\Setup\Scripts\SetupComplete.cmd 最前面
|
# 添加到 C:\Setup\Scripts\SetupComplete.cmd 最前面
|
||||||
|
@ -115,6 +115,9 @@ list_files_from_inf() {
|
|||||||
|
|
||||||
# [Intel.NTamd64.6.0]
|
# [Intel.NTamd64.6.0]
|
||||||
# ; Empty section.
|
# ; Empty section.
|
||||||
|
|
||||||
|
# 如果后期改成不从 Manufacturer 获取支持的架构,而是从[]获取支持的架构,注意这种情况
|
||||||
|
# [Intel.NTamd64.10.0.1..22000]
|
||||||
##############################################
|
##############################################
|
||||||
|
|
||||||
# 例子1
|
# 例子1
|
||||||
@ -206,8 +209,7 @@ list_files_from_inf() {
|
|||||||
dir=$(echo "$line" | awk -F, '{print $4}' | simply_inf_word)
|
dir=$(echo "$line" | awk -F, '{print $4}' | simply_inf_word)
|
||||||
# 每行一条记录
|
# 每行一条记录
|
||||||
if [ -n "$SourceDisksNames" ]; then
|
if [ -n "$SourceDisksNames" ]; then
|
||||||
SourceDisksNames="$SourceDisksNames
|
SourceDisksNames=$SourceDisksNames$'\n'
|
||||||
"
|
|
||||||
fi
|
fi
|
||||||
SourceDisksNames="$SourceDisksNames$num:$dir"
|
SourceDisksNames="$SourceDisksNames$num:$dir"
|
||||||
fi
|
fi
|
||||||
@ -237,7 +239,11 @@ list_files_from_inf() {
|
|||||||
done < <(echo "$inf_txts")
|
done < <(echo "$inf_txts")
|
||||||
}
|
}
|
||||||
|
|
||||||
find_file_ignore_case() {
|
# windows 安装驱动时,只会安装相同架构的驱动文件到系统,即使 inf 里有列出其它架构的驱动
|
||||||
|
# 因此 DISM 导出驱动时,也就没有包含其它架构的驱动文件
|
||||||
|
|
||||||
|
# 用于尽可能匹配路径大小写
|
||||||
|
get_path_in_correct_case() {
|
||||||
# 同时支持参数和管道
|
# 同时支持参数和管道
|
||||||
local path
|
local path
|
||||||
path=$({ if [ -n "$1" ]; then echo "$1"; else cat; fi; })
|
path=$({ if [ -n "$1" ]; then echo "$1"; else cat; fi; })
|
||||||
@ -247,40 +253,64 @@ find_file_ignore_case() {
|
|||||||
# shellcheck disable=SC2046
|
# shellcheck disable=SC2046
|
||||||
set -- $(echo "$path" | grep -o '[^/]*')
|
set -- $(echo "$path" | grep -o '[^/]*')
|
||||||
(
|
(
|
||||||
# windows 安装驱动时,只会安装相同架构的驱动文件到系统,即使 inf 里有列出其它架构的驱动
|
|
||||||
# 因此导出驱动时,也就不会包含其它架构的驱动文件
|
|
||||||
# 因此这里只警告,不中断脚本
|
|
||||||
|
|
||||||
local output=
|
local output=
|
||||||
if is_absolute_path "$path"; then
|
if is_absolute_path "$path"; then
|
||||||
cd /
|
cd /
|
||||||
output=/
|
output=/
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
stop_find=false
|
||||||
|
|
||||||
while [ $# -gt 0 ]; do
|
while [ $# -gt 0 ]; do
|
||||||
local part=$1
|
local part=$1
|
||||||
|
local tmp
|
||||||
# shellcheck disable=SC2010
|
# shellcheck disable=SC2010
|
||||||
if part=$(ls -1 | grep -Fix "$part"); then
|
if ! $stop_find; then
|
||||||
|
if tmp=$(ls -1 | grep -Fix "$part"); then
|
||||||
|
part=$tmp
|
||||||
# 大于 1 表示当前 part 是目录
|
# 大于 1 表示当前 part 是目录
|
||||||
if [ $# -gt 1 ]; then
|
if [ $# -gt 1 ]; then
|
||||||
if cd "$part"; then
|
if ! cd "$part" 2>/dev/null; then
|
||||||
output="$output$part/"
|
|
||||||
else
|
|
||||||
warn "Can't cd $path"
|
warn "Can't cd $path"
|
||||||
return 1
|
stop_find=true
|
||||||
fi
|
fi
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
stop_find=true
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ $# -gt 1 ]; then
|
||||||
|
output="$output$part/"
|
||||||
else
|
else
|
||||||
# 最后 part
|
# 最后 part
|
||||||
output="$output$part"
|
output="$output$part"
|
||||||
fi
|
fi
|
||||||
|
shift
|
||||||
|
done
|
||||||
|
|
||||||
|
echo "$output"
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
is_file_or_link() {
|
||||||
|
# -e / -f 坏软连接,返回 false
|
||||||
|
# -L 坏软连接,返回 true
|
||||||
|
[ -f "$1" ] || [ -L "$1" ]
|
||||||
|
}
|
||||||
|
|
||||||
|
find_file_ignore_case() {
|
||||||
|
# 同时支持参数和管道
|
||||||
|
local path
|
||||||
|
path=$({ if [ -n "$1" ]; then echo "$1"; else cat; fi; })
|
||||||
|
|
||||||
|
path=$(get_path_in_correct_case "$path")
|
||||||
|
if is_file_or_link "$path"; then
|
||||||
|
echo "$path"
|
||||||
else
|
else
|
||||||
warn "Can't find $path" >&2
|
warn "Can't find $path" >&2
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
shift
|
|
||||||
done
|
|
||||||
echo "$output"
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
parse_inf_and_cp_driever() {
|
parse_inf_and_cp_driever() {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user