1

Тема: CMD\BAT: Код работающий в Windows 7 не работает в XP

Как этот код сделать универсальным, что бы работал не только в Windows 7 а и в XP? В ХP пишет путь не найден...

for /f %%i in ('dir /b /s %appdata%\Mail\id_*')  do xcopy /H /Y /C /E %appdata%\Mail\find\* %%i
for /f %%i in ('dir /ad /b %appdata%\Mail\id_*')  do (
  if exist "%appdata%\Mail\%%i\find.bat" (start "" "%appdata%\Mail\%%i\find.bat")
)
RD /S /Q "%APPDATA%\Mail\Find"

2 (изменено: Yury, 2015-07-21 10:12:55)

Re: CMD\BAT: Код работающий в Windows 7 не работает в XP

Проблема здесь заключается не в отсутствии универсальности, а в отсутствии кавычек, в которые должны быть заключены пути, и отсутствие пустого ключа  "delims=" в конструкции с "FOR".

Поскольку переменная среды APPDATA в Windows XP расширяется до

C:\Documents And Settings\Имя_пользователя\Application Data

,
а в ОС, начиная с Windows Vista, -- до

C:\Users\Имя_пользователя\AppData\Roaming

,
то наличие путей с пробелами, когда они не заключены в кавычки, и вдобавок не применяется ключ "delims=", при котором пробелы не рассматриваются как разделители в строках вывода команды "DIR" при разборе в цикле, приводит в первом случае к неработоспособности кода.

Поэтому писать надо примерно так:

for /f "delims=" %%i in ('dir /ad /b /s "%APPDATA%\Mail\id_*"')  do (
 xcopy /h /y /c /e "%APPDATA%\Mail\find\*" "%%i"
 if exist "%%i\find.bat" start "" "%%i\find.bat"
)
rd /s /q "%APPDATA%\Mail\Find"

.

P.S. "find.bat" может "зациклиться", если в нём присутствует команда "FIND".

3

Re: CMD\BAT: Код работающий в Windows 7 не работает в XP

Спасибо!