2013-03-21 3 views
1

Я пытаюсь сделать один пакетный файл как для резервного копирования, так и для восстановления файлов cookie для моей любимой онлайн-игры, но столкнулся с проблемой при попытке перейти мимо случайно названной папки, в которой Chrome использует свои файлы cookie.Использование произвольно сгенерированного имени папки в дереве каталогов?

Я попытался использовать команду FOR, чтобы получить переменную, которая даст мне имя папки, а затем я буду использовать эту переменную позже в каталогах. Переменная работала нормально, когда ECHO 'd, но затем ставила %G при вводе в каталог.

Сначала я положил в моем коде, но это был уродливый блок текста, так вот только несколько примеров:

FOR /F "tokens=*" %%G IN ('dir /B /AD "%SYSTEMDRIVE%\Users\%USERNAME%\AppData\Local\Google\Chrome\User Data\Default\Pepper Data\Shockwave Flash\WritableRoot\#SharedObjects"') DO (
echo %%G) 

Возвращаемого эхо правильного имени папки :)

Но когда я %%G в каталоге:

copy "%SYSTEMDRIVE%\Users\%USERNAME%\AppData\Local\Google\Chrome\User Data\Default\Pepper Data\Shockwave Flash\WritableRoot\#SharedObjects\%%G\chat.kongregate.com\antiIdle_file0" "%HOMEPATH%\My Documents\Anti-Idle backup\antiIdle_file0.sol" /D /E /C /R /I /K /Y 

при проверке переменной с ECHO перед ним, %%G показывает, как %G вместо случайной строки чисел, которая должна отображаться как.

Если я делаю что-то не так, пожалуйста, критикуйте меня. Если у вас есть предложение или альтернативный способ справиться с этим, скажите мне. Спасибо заранее.

+0

Не то, что это то, что это неправильно, но вы можете сократить ваши пути много с помощью '% LocalAppData%' вместо '% SYSTEMDRIVE% \ Users \ % USERNAME% \ AppData \ Local'. Или, если вам нужна совместимость с XP, '% TEMP% \ .. \ Google \ etc'. :) Подробнее о [Переменные среды Windows] (http://ss64.com/nt/syntax-variables.html). – rojo

ответ

0

Если вы хотите, чтобы найти папку, в одной части кода и использовать его в другом месте, вы можете использовать цикл for установить еще одну переменную, и использовать эту другую для копии позже.

FOR /F "tokens=*" %%G IN ('dir /B /AD "...your path..."') DO (
    SET FolderPath=%%G 
) 

... и в других местах:

COPY "...source file..." "%FolderPath%" 
+0

Спасибо, что дали мне только ответ, который я искал. :) Дал мне достаточно маневренности, чтобы добавить в нее дополнительные функции, благодаря тонне! – SimpleMan

0

%%G действует только в контексте FOR, следовательно, вам необходимо включить вашу COPY команды между круглыми скобками после DO

FOR /F "tokens=*" %%G IN (
'dir ...blahblahblah...SharedObjects"') DO (
echo %%G 
copy "%SYSTEMDRIVE%\...blah..SharedObjects\%%G\...zzzz...file0" "%HOMEPATH%...etc.._file0.sol" /D /E /C /R /I /K /Y 
) 

Очевидно, что echo %%G не является обязательной. (это нормально, чтобы разбить команду на отдельные строки -. С осторожностью Critical, что открытая скобка находится на той же линии, что и DO)

Другой способ

FOR /F "tokens=*" %%G IN (
'dir ...blahblahblah...SharedObjects"') DO set "target=%%G" 
copy "%SYSTEMDRIVE%\...blah..SharedObjects\%TARGET%\...zzzz...file0" "%HOMEPATH%...etc.._file0.sol" /D /E /C /R /I /K /Y 

отмечая, что в случае с метастабильный (%%G) является критическим, но имя и случай TARGET нет.

0

Вы также можете сделать рекурсивный поиск по chat.kongregate.com.

for /f "delims=" %%I in ('dir /s /b /a:d "%LOCALAPPDATA%\Google\Chrome\*chat.kongregate.com"') do (
    copy /d /y "%%I\antiIdle_file0" "%USERPROFILE%\My Documents\Anti-Idle backup\antiIdle_file0.sol" 
)