【问题标题】:Using a randomly generated folder name in a directory tree?在目录树中使用随机生成的文件夹名称?
【发布时间】:2013-03-21 18:52:20
【问题描述】:

我正在尝试制作一个批处理文件来备份和恢复我最喜欢的在线游戏的 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,而不是应显示为的随机数字字符串。

如果我做错了什么,请批评我。如果您有建议或替代方法来处理此问题,请告诉我。 提前致谢。

【问题讨论】:

  • 这不是问题所在,但是您可以通过使用%LOCALAPPDATA% 而不是%SYSTEMDRIVE%\Users\%USERNAME%\AppData\Local 大大缩短您的路径。或者,如果您想要 XP 兼容性,%TEMP%\..\Google\etc。 :) 有关Windows Environment Variables 的更多信息。

标签: variables random batch-file directory


【解决方案1】:

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

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

...和其他地方:

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

【讨论】:

  • 感谢您给了我正在寻找的答案。 :) 给了我足够的机动性来添加额外的功能,非常感谢!
【解决方案2】:

%%G 仅在FOR 的上下文中有效,因此您需要在DO 后面的括号之间包含COPY 命令

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 的名称和大小写不是。

【讨论】:

    【解决方案3】:

    您还可以对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"
    )
    

    【讨论】:

      猜你喜欢
      • 2010-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多