【问题标题】:Creating root folders without files创建没有文件的根文件夹
【发布时间】:2014-08-04 02:04:17
【问题描述】:

我一直在疯狂地尝试制作基于上下文菜单的“仅文件夹”复印机。这很像 xcopy /T /E,但 xcopy 不允许您复制主目录。它只复制子目录(我认为?)

所以我有一个程序可以让我突出显示某些文件夹并将它们作为参数传递给批处理脚本,我可以遍历它们。我遇到的问题是一切都被评估为第一个参数。我最终让第一个文件夹尝试多次创建自己。

这是我设想的完整脚本。请注意,我从来没有真正进入第二部分,我让 xcopy 像往常一样完成填充子目录的工作。我只是碰壁试图创建根目录。这对我来说是最关键的。以前目录中的 xcopy 不可行,因为我只想创建 CERTAIN FOLDERS

@echo off
setlocal EnableDelayedExpansion


md "copy of folders"
cd "copy of folders"

for %%x in (%*) do (
   echo %%x
   ::^ this will give me all the args full paths as it iterates
   md "%~n1"
   ::^ this retrieves folder name, but its always the first argument's folder name, it doesn't iterate
)

pause

for %%x in (%*) do (
   xcopy %%x "%cd%" /T /E
)

【问题讨论】:

    标签: windows batch-file


    【解决方案1】:

    改变

     md "%~n1"
    

    从参数 1 的名称部分创建一个目录

     md %%~nxx
    

    从元变量 %%x 的当前值的名称和扩展部分创建一个目录。

    不确定xcopy 的用途。您似乎想将树从新创建(因此为空)目录复制到当前目录 "copy of folders"


    这是我的完整测试批次。我使用U: 作为测试数据。

    @echo off
    setlocal EnableDelayedExpansion
    
    PUSHD U:\
    
    md "copy of folders"
    cd "copy of folders"
    
    dir
    ECHO ============================
    for %%x in (%*) do (
      echo %%x
    rem  ::^ this will give me all the args full paths as it iterates
      md %%~nxx
    rem  ::^ this retrieves folder name, but its always the first argument's folder name, it doesn't iterate
    )
    
    DIR
    POPD
    
    GOTO :EOF
    

    这是我的测试结果,使用 thisbatch "U:\path" "u:\path2" path3

     Volume in drive U has no label.
     Volume Serial Number is 0460-0000
    
     Directory of U:\copy of folders
    
    05/08/2014  10:56    <DIR>          .
    05/08/2014  10:56    <DIR>          ..
                   0 File(s)              0 bytes
                   2 Dir(s)   2,146,893,824 bytes free
    ============================
    "U:\path"
    "U:\path2"
    "PATH3"
     Volume in drive U has no label.
     Volume Serial Number is 0460-0000
    
     Directory of U:\copy of folders
    
    05/08/2014  10:56    <DIR>          .
    05/08/2014  10:56    <DIR>          ..
    05/08/2014  10:56    <DIR>          path
    05/08/2014  10:56    <DIR>          path2
    05/08/2014  10:56    <DIR>          PATH3
                   0 File(s)              0 bytes
                   5 Dir(s)   2,146,795,520 bytes free
    

    请注意,:: 注释方法实际上是一个损坏的标签 - 它可能会导致块语句(括号内的一系列语句)出现问题,因此应替换为 REM

    如果要创建相对于当前(文件夹副本)的目录,则使用 ~nxx。如果您希望使用评论中所述的完整路径创建这些目录,则当前目录无关紧要,您应该使用 "%%~fx"(包括引号)。

    引号不是必需的,除非您在需要引号时在要创建的名称中包含分隔符(行空格)。

    【讨论】:

    • 这仍然只是从作为参数传递的一系列文件夹中创建 1 个文件夹名称,例如 "c:/path" "c:/path2" "c:/path3" 我的意思是使用 xcopy因为它通常会被使用。它将填充复制的根目录名称,这些名称与复制的根文件夹位于同一层的“文件夹副本”中。例如:“c:/path”“c:/path2”“c:/path3”“c:/文件夹副本/path1”“c:/文件夹副本/path2”“c:/文件夹副本/path3”
    猜你喜欢
    • 1970-01-01
    • 2020-04-21
    • 2016-11-03
    • 2021-07-13
    • 1970-01-01
    • 2015-07-01
    • 2020-03-22
    • 2011-08-22
    相关资源
    最近更新 更多