在目录树中使用随机生成的文件夹名称?

时间:2013-03-21 18:52:21

标签: variables random batch-file directory

我正在尝试为我最喜爱的在线游戏制作单个批处理文件备份和恢复Cookie,但在尝试浏览Chrome用于存放其Cookie的随机命名文件夹时遇到了问题。

我尝试使用FOR命令获取一个可以给我文件夹名称的变量,然后我会在目录中使用该变量。变量在ECHO'时工作正常,但在放入目录时变为%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,而不是应显示为的随机数字字符串。

如果我做错了,请批评我。如果您有建议或其他方式来处理此问题,请告诉我。 提前谢谢。

3 个答案:

答案 0 :(得分: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是可选的。 (将命令分成不同的行是可以的 - 小心。关键是开括号与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)的CASE是关键的,但TARGET的名称和大小写不是。

答案 1 :(得分: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"
)

答案 2 :(得分:0)

如果要在代码的一部分中找到该文件夹​​并在其他地方使用它,可以使用for循环设置另一个变量,然后再使用另一个变量进行复制。

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

......和其他地方:

COPY "...source file..." "%FolderPath%"