我一直在努力制作一个仅基于文件夹的上下文菜单'复印机。这与xcopy / T / E非常相似,但xcopy不允许您复制主目录。它只复制子目录(我想?)
所以我有一个程序可以让我突出显示某些文件夹并将它们作为args传递给批处理脚本,我可以遍历它们。我遇到的问题是一切都被评估为第一个arg。我最终让第一个文件夹尝试多次创建自己。
这是我设想的完整脚本。注意我从来没有真正到过第二部分,我让xcopy做正常填充子目录的工作。我只是碰壁试图创建根目录。这对我来说是最关键的事情。来自以前目录的xcopy是不可行的,因为我只想创建某些文件夹:
@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
)
答案 0 :(得分: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
请注意,::
注释mathod实际上是一个损坏的标签 - 它可能会导致块语句出现问题(带括号的系列语句)因此应该被REM
替换
如果要创建相对于当前(文件夹副本)的目录,则使用~nxx。如果您希望在评论中使用完整路径创建这些目录,那么当前目录无关紧要,您应该使用"%%~fx"
(包括引号)。
除非您在需要引号时在要创建的名称中包含分隔符(行空格),否则不需要引号。