В настоящее время я пытаюсь получить список элементов, сохраненных из профиля на старом компьютере, а затем отправленных на новый компьютер и профиль, поскольку профиль тот же.
В Windows 7 в папке %AppData%\Microsoft\Sticky Notes хранится .snt для липких заметок. Это местоположение изначально существует до Windows 10 1511.
В Windows 10 1607 он был перемещен в %LocalAppData%\Packages\Microsoft.MicrosoftStickyNotes_8wekyb3d8bbwe\LocalState" and changed toplum.sqlite`.
Если вы обновили что-либо до Windows 10 1607, в ней будет создана папка Legacy с ThresholdNotes.snt, которая будет преобразована в plum.sqlite.
Я пишу вложенный .bat, который:
ЕСЛИ на новом компьютере есть старые стикеры
проверьте извлеченный файл .snt, затем скопируйте поверх
ELSE
проверьте на выдернутый .snt file
ЕСЛИ новое устаревшее местоположение не существует
создать, затем скопировать и переименовать .snt в convert
ELSE
копировать, переименовать
ЕСЛИ расположение старых стикеров не существует
затем проверьте наличие нового файла .sqlite
ELSE
скопировать новый файл в новое место
В противном случае скажите, что ничего не обнаружено.
Но кажется, что я пишу неправильно или что-то в этом роде, потому что я поставил паузу в .bat, но он сразу закрывается при запуске.
Вот текущая часть Pull, из которой извлекаются .snt или .sqlite. Сначала переменные, а затем собственно действие.
REM Saves Users Sticky Notes
Set StickyNotes = "%userprofile%\AppData\Roaming\Microsoft\Sticky Notes\StickyNotes.snt"
Set FlashStickyNotes = "%~dp0%USERNAME%\StickyNotes"
REM Saves Users Sticky Notes From Win 10 1607+
Set StickyNotesWin10 = "%userprofile%\AppData\Local\Packages\Microsoft.MicrosoftStickyNotes_8wekyb3d8bbwe\LocalState\plum.sqlite"
Set FlashStickyNotesWin10 = "%~dp0%USERNAME%\StickyNotesWin10"
Title Pulling StickyNotes
if exist %StickyNotes% ( xcopy %StickyNotes% %FlashStickyNotes% /f /y ) ELSE if exist %StickyNotesWin10% (
xcopy %StickyNotesWin10% %FlashStickyNotesWin10% /f /y ) else Echo "No Sticky Notes Detected"
^^ Эта часть, кажется, работает нормально и не имеет никаких проблем
Вот часть Push, и здесь у меня, кажется, проблемы, но, может быть, ее форматирование? Сначала переменные, а затем собственно действие.
REM Saves Users Sticky Notes
Set StickyNotes = "%userprofile%\AppData\Roaming\Microsoft\Sticky Notes\"
Set FlashStickyNotes = "%~dp0%USERNAME%\StickyNotes\StickyNotes.snt"
REM Saves Users Sticky Notes From Win 10 1607+
Set StickyNotesWin10 = "%userprofile%\AppData\Local\Packages\Microsoft.MicrosoftStickyNotes_8wekyb3d8bbwe\LocalState\"
Set FlashStickyNotesWin10 = "%~dp0%USERNAME%\StickyNotesWin10\plum.sqlite"
Title Pushing StickyNotes
REM if old sticky notes location on the new computer exists, then check for pulled .snt file, then copy over ELSE
REM if new sticky notes location exists, check for pulled .snt file, if new legacy location not exist, then create and then copy and rename .snt to convert, else copy,rename
REM if old sticky notes location not exist, then check for new .sqlite file, if exist then copy new file to new location ELSE
REM otherwise say there are none detected
IF exist "%userprofile%\AppData\Roaming\Microsoft\Sticky Notes\"( IF exist "%FlashStickyNotes%"( xcopy %FlashStickyNotes% %StickyNotes% /F /Y )
IF exist "%userprofile%\AppData\Local\Packages\Microsoft.MicrosoftStickyNotes_8wekyb3d8bbwe\LocalState\"(
IF exist "%FlashStickyNotes%"(
IF not exist "%userprofile%\AppData\Local\Packages\Microsoft.MicrosoftStickyNotes_8wekyb3d8bbwe\LocalState\Legacy"(
mkdir "%userprofile%\AppData\Local\Packages\Microsoft.MicrosoftStickyNotes_8wekyb3d8bbwe\LocalState\Legacy"
xcopy %FlashStickyNotes% "%userprofile%\AppData\Local\Packages\Microsoft.MicrosoftStickyNotes_8wekyb3d8bbwe\LocalState\Legacy\ThresholdNotes.snt" /F /Y
) else IF exist "%userprofile%\AppData\Local\Packages\Microsoft.MicrosoftStickyNotes_8wekyb3d8bbwe\LocalState\Legacy"((
xcopy %FlashStickyNotes% "%userprofile%\AppData\Local\Packages\Microsoft.MicrosoftStickyNotes_8wekyb3d8bbwe\LocalState\Legacy\ThresholdNotes.snt" /F /Y
)
)
) else IF not exist "%StickyNotes%" (
IF exist %FlashStickyNotesWin10% (
copy %FlashStickyNotesWin10% %StickyNotesWin10% /Y
)
)
) ELSE Echo "No Sticky Notes Detected"
Раз у вас даже есть два открывающихся ( ...





Помимо имеющихся у вас проблем с синтаксисом (отсутствует SPACE между условным выражением и открывающей скобкой, if exist "%somepath%" (; и даже две открывающие круглые скобки один раз, if exist "%somepath%"((), я считаю, что ваша проблема заключается в логике и вводящем в заблуждение способе отступов и скобок, которые вы используете.
Предположим, что следующий фрагмент кода:
@echo off
set "X = " & set "Y = "
set /P X = "X = "
set /P Y = "Y = "
if defined X if defined Y (
echo X=%X%, Y=%Y%
) else echo X and/or Y is empty
Что вы ожидаете получить, если переменная X пуста?
Давайте посмотрим на тот же код в функции, но по-разному написанный (на этот раз пропуская определения переменных / подсказки):
if defined X (
if defined Y (
echo X=%X%, Y=%Y%
) else (
echo X and/or Y is empty
)
)
Теперь вы можете заметить, что в случае пустой переменной X ничего не возвращается.
Исправленный код может выглядеть так:
if defined X (
if defined Y (
echo X=%X%, Y=%Y%
) else (
echo Y is empty
)
) else (
echo X is empty, Y not checked
)
REM OS before Vista have no LocalAppData variable
if not defined LocalAppData set "LocalAppData=%AppData%\..\Local"
REM Saves Users Sticky Notes
Set StickyNotes=%AppData%\Microsoft\Sticky Notes\StickyNotes.snt
Set FlashStickyNotes=%~dp0%USERNAME%\StickyNotes
REM Saves Users Sticky Notes From Win 10 1607+
Set StickyNotesWin10=%LocalAppData%\Packages\Microsoft.MicrosoftStickyNotes_8wekyb3d8bbwe\LocalState\plum.sqlite
Set FlashStickyNotesWin10=%~dp0%USERNAME%\StickyNotesWin10
Title Pulling StickyNotes
if exist "%StickyNotes%" (
xcopy "%StickyNotes%" "%FlashStickyNotes%" /f /y
) else if exist "%StickyNotesWin10%" (
xcopy "%StickyNotesWin10%" "%FlashStickyNotesWin10%" /f /y
) else Echo "No Sticky Notes Detected"
Это часть тяги. Просто изменили пути с цитированием и используйте
стандартных переменных. При необходимости добавьте %LocalAppData% not defined check
и используйте замену в ОС до Vista.
REM OS before Vista have no LocalAppData variable
if not defined LocalAppData set "LocalAppData=%AppData%\..\Local"
REM Saves Users Sticky Notes
Set StickyNotes=%AppData%\Microsoft\Sticky Notes
Set FlashStickyNotes=%~dp0%USERNAME%\StickyNotes\StickyNotes.snt
REM Saves Users Sticky Notes From Win 10 1607+
Set StickyNotesWin10=%LocalAppData%\Packages\Microsoft.MicrosoftStickyNotes_8wekyb3d8bbwe\LocalState
Set FlashStickyNotesWin10=%~dp0%USERNAME%\StickyNotesWin10\plum.sqlite
Title Pushing StickyNotes
REM if old sticky notes location on the new computer exists, then check for pulled .snt file, then copy over ELSE
REM if new sticky notes location exists, check for pulled .snt file, if new legacy location not exist, then create and then copy and rename .snt to convert, else copy,rename
REM if old sticky notes location not exist, then check for new .sqlite file, if exist then copy new file to new location ELSE
REM otherwise say there are none detected
IF exist "%StickyNotes%" (
IF exist "%FlashStickyNotes%" (
xcopy "%FlashStickyNotes%" "%StickyNotes%" /F /Y
)
) else IF exist "%StickyNotesWin10%\" (
IF exist "%FlashStickyNotes%" (
IF not exist "%StickyNotesWin10%\Legacy" (
mkdir "%StickyNotesWin10%\Legacy"
xcopy "%FlashStickyNotes%" "%StickyNotesWin10%\Legacy\ThresholdNotes.snt" /F /Y
) else (
xcopy "%FlashStickyNotes%" "%StickyNotesWin10%\Legacy\ThresholdNotes.snt" /F /Y
)
)
) else (
IF exist "%FlashStickyNotesWin10%" (
copy "%FlashStickyNotesWin10%" "%StickyNotesWin10%" /Y
) else (
Echo "No Sticky Notes Detected"
)
)
Буквальные пути заменены переменными там, где это возможно. Отступы сделаны согласованными
так что открывающие и закрывающие скобки могут быть проще соединены. Заменены устаревшие чеки else if
с помощью только else.
Цитирование путей, сделанных позже, позволяет при необходимости расширять пути.
Не уверен, что вы выйдете из сценария, если Echo "No Sticky Notes Detected".
Если вы действительно хотите выйти, можете использовать:
>&2 Echo "No Sticky Notes Detected"
exit /b 1
поэтому эхо переходит на stderr и выходит с уровнем ошибки 1.
Код не протестирован, пожалуйста, проверьте мои изменения.
Я смог использовать то, что вы опубликовали, и я дал последнему «If» свое собственное утверждение вместо другого, и это позволило plum.sqlite перейти и изменить копию на «xcopy» и добавить «/ f» к Это. Работает как шарм! Огромное спасибо.
Поместите космос между условием и открывающей скобкой:
if exist "%somepath%" (