@echo off
setlocal
dir /r "%~f0" | findstr /c:" %~nx0:settings" 2>nul >nul && (
for /f "usebackq delims=" %%A in ("%~f0:settings") do set %%A
)
if defined SOURCEDIR echo The current source directory is %SOURCEDIR%.
set /p "SOURCEDIR= Please input new directory or press [Enter] for no change. "
if defined XMLFILE echo The current XML database is %XMLFILE%.
set /p "XMLFILE=Please input new database or press [Enter] for no change. "
(
echo SOURCEDIR=%SOURCEDIR%
echo XMLFILE=%XMLFILE%
) > "%~f0:settings"
При этом используется альтернативный поток данных (ADS) пакетного файла для
сохранить настройки.
NTFS файловая система не требуется. Поток ADS теряется, если
Пакетный файл копируется в файловую систему, отличную от NTFS.
dir
, переданный на findstr
, должен определить,
Поток существует, прежде чем пытаться читать с него.
Это помогает избежать сообщения об ошибке от for
Цикл, если ADS не существует.
Цикл for
устанавливает имена переменных и значения, считываемые из ADS.
Наконец, переменные сохраняются в ADS.
Примечание
%~f0
- полный путь к пакетному файлу.
См. for /?
обо всех доступных модификаторах.
%~f0:settings
- пакетный файл с ADS с именем settings .
dir /r
отображает файлы и файлы с ADS.
Важно
Любая идея, связанная с записью в пакетный файл, может привести к
в повреждении файла, так что, безусловно, посоветуете резервную копию
пакетный файл.