0

所以我有下面的批处理文件。

    @ECHO OFF
    FOR %%I IN (.) DO SET FolderName=%%~nxI
    MKDIR "C:\%FolderName%"
    for %%i in (%*) do (
      move "%%~i" "C:\%FolderName%"
    )

因此,当我将多个文件拖放到批处理文件中时,它将使用包含我拖放文件的文件夹的名称,并在 C:\ 处创建一个具有相同名称的新文件夹,然后将文件移动到C:\ 的新文件夹

示例:包含我要移动的文件的文件夹名称为 Shop。然后文件夹 Shop 位于

...\地面\钟\塔\商店

使用批处理文件将创建一个新文件夹名称 Shop at C:\

例子

C:\商店

当我一次拖放大约 100 个文件时,批处理文件有效。问题是,当我一次拖放 300 个文件时,它返回“文件名或扩展名太长”的错误。我可以手动移动文件,所以我知道这不是文件名太长造成的。

然后我制作了一个新的批处理文件,认为这可能是move命令或我的 for 循环的问题。所以我在下面写了批处理文件。

    @echo off
    FOR %%I IN (.) DO SET FolderName=%%~nxI
    MKDIR "C:\%FolderName%"
    MOVE "%cd%\*.*" "C:\%FolderName%"

现在上面的第二个批处理文件与第一个批处理文件几乎相同。就像第二个批处理文件一样,我只需要从我要移动的文件夹中拖放一个文件,它会将第一个文件夹中的所有文件移动到 C:\ 的新文件夹中,即使第一个文件夹有1000 个文件。

我的问题是,如果我一次拖放太多文件,为什么第一个批处理文件会失败。使用第二个批处理文件工作,所以不能是因为move命令还是它?由于我将所有文件从一个文件夹移动到另一个文件夹,第二个批处理文件适合我的需要,并且想知道第二个批处理文件是否会有任何问题或更好的方法。

4

2 回答 2

1

当您在 Bat 文件上拖放文件时,实际上会调用 Bat,就好像您会在命令提示符下调用它一样。因此,如果您在 Bat ie 上拖动三个文件

Testfile.txt
Testfile.md
Testfile.jpg

然后实际上你的 Bat 是这样调用的:

C:\MyBatch.BAT Testfile.txt Testfile.md Testfile.jpg

如果你打电话给更多,它显然是这样的:

C:\MyBatch.BAT Testfile.txt Testfile.md Testfile.jpg Testfile01.txt Testfile01.md Testfile01.jpg Testfile02.txt Testfile02.md Testfile02.jpg Testfile03.txt Testfile03.md Testfile03.jpg Testfile04.txt Testfile04.md Testfile04.jpg Testfile05.txt Testfile05.md Testfile05.jpg etc...

啊,你能读懂剩下的那行吗?好的,这不像 1000 个文件那么长,但要明白你的脚本有什么不同。您的命令行缓冲区将无法捕获那么多输入。

实际上,您可以在命令提示符中输入多少字符的大小因系统而异,但在 winXP 中有 8k 之类的东西,我认为它仍然是一样的。

http://support.microsoft.com/kb/830473 <--这可以帮助更多关于最大。

而且由于您的命令提示符的长度是如此“短”,您必须为更长的文件路径找到不同的方法 - 正如您所做的那样 - 您也可以克服这个问题,如果您输出要在文本文件中复制的文件然后使用作为复制蝙蝠的输入。

dir /b >filelist.txt

所以现在你有了这个文件列表,那么你只需逐行阅读文本文件:

for /f "delims=" %%i in (filelist.txt) do echo D|xcopy "C:\FolderName\%%i" "c:\temp\%%i" /i /z /y 

所以这实际上会读取您的文件 list.txt 并将(对于列表中的每个文件名)按 D 键并将其传递给 XCopy 命令。

因此,将文件列表传递给您的命令是一种更好的方法,实际上在您的情况下,如果您真的想要整个目录而不仅仅是一个选择,那么复制目录比逐个文件复制要快。

希望你的问题得到解答。

于 2015-10-09T20:25:51.490 回答
0

如果我没记错的话,您正在尝试创建一个以父文件夹为名称的文件夹。因此,在您在另一篇文章中再次提出同样的问题之前,我将对您正在寻找的内容进行编码。

@echo off
setlocal
set "destination=c:\destination"

for %%i in (%~1) do set "parent=%%~pi" &goto:next
:next
for %%i in ("%parent:~0,-1%") do set "parent=%%~nxi"

for %%i in (%*) do (
  echo:
  if not exist %destination%\%parent%\nul ( mkdir "%destination%\%parent%" )
  move "%%~i" "%destination%%parent%"
)

另外,在前面的代码中,一个有很多参数的命令也不是问题。

例如:写一个批处理文件,代码如下

@echo off
setlocal
set "destination=c:\destination"

for %%i in (%~1) do set "parent=%%~pi" &goto:next
:next
for %%i in ("%parent:~0,-1%") do set "parent=%%~nxi"

for %%i in (%*) do (
  echo:
  if not exist %destination%\%parent%\nul (echo mkdir "%destination%\%parent%")
  echo move "%%~i" "%destination%%parent%"
)

调用它test-move.bat并将以下包含 250 个参数的长命令行放入 cmd:

test-move.bat TestFile001.txt TestFile002.txt TestFile003.txt TestFile004.txt TestFile005.txt TestFile006.txt TestFile007.txt TestFile008.txt TestFile009.txt TestFile010.txt TestFile011.txt TestFile012.txt TestFile013.txt TestFile014.txt TestFile015.txt TestFile016.txt TestFile017.txt TestFile018.txt TestFile019.txt TestFile020.txt TestFile021.txt TestFile022.txt TestFile023.txt TestFile024.txt TestFile025.txt TestFile026.txt TestFile027.txt TestFile028.txt TestFile029.txt TestFile030.txt TestFile031.txt TestFile032.txt TestFile033.txt TestFile034.txt TestFile035.txt TestFile036.txt TestFile037.txt TestFile038.txt TestFile039.txt TestFile040.txt TestFile041.txt TestFile042.txt TestFile043.txt TestFile044.txt TestFile045.txt TestFile046.txt TestFile047.txt TestFile048.txt TestFile049.txt TestFile050.txt TestFile051.txt TestFile052.txt TestFile053.txt TestFile054.txt TestFile055.txt TestFile056.txt TestFile057.txt TestFile058.txt TestFile059.txt TestFile060.txt TestFile061.txt TestFile062.txt TestFile063.txt TestFile064.txt TestFile065.txt TestFile066.txt TestFile067.txt TestFile068.txt TestFile069.txt TestFile070.txt TestFile071.txt TestFile072.txt TestFile073.txt TestFile074.txt TestFile075.txt TestFile076.txt TestFile077.txt TestFile078.txt TestFile079.txt TestFile080.txt TestFile081.txt TestFile082.txt TestFile083.txt TestFile084.txt TestFile085.txt TestFile086.txt TestFile087.txt TestFile088.txt TestFile089.txt TestFile090.txt TestFile091.txt TestFile092.txt TestFile093.txt TestFile094.txt TestFile095.txt TestFile096.txt TestFile097.txt TestFile098.txt TestFile099.txt TestFile100.txt TestFile101.txt TestFile102.txt TestFile103.txt TestFile104.txt TestFile105.txt TestFile106.txt TestFile107.txt TestFile108.txt TestFile109.txt TestFile110.txt TestFile111.txt TestFile112.txt TestFile113.txt TestFile114.txt TestFile115.txt TestFile116.txt TestFile117.txt TestFile118.txt TestFile119.txt TestFile120.txt TestFile121.txt TestFile122.txt TestFile123.txt TestFile124.txt TestFile125.txt TestFile126.txt TestFile127.txt TestFile128.txt TestFile129.txt TestFile130.txt TestFile131.txt TestFile132.txt TestFile133.txt TestFile134.txt TestFile135.txt TestFile136.txt TestFile137.txt TestFile138.txt TestFile139.txt TestFile140.txt TestFile141.txt TestFile142.txt TestFile143.txt TestFile144.txt TestFile145.txt TestFile146.txt TestFile147.txt TestFile148.txt TestFile149.txt TestFile150.txt TestFile151.txt TestFile152.txt TestFile153.txt TestFile154.txt TestFile155.txt TestFile156.txt TestFile157.txt TestFile158.txt TestFile159.txt TestFile160.txt TestFile161.txt TestFile162.txt TestFile163.txt TestFile164.txt TestFile165.txt TestFile166.txt TestFile167.txt TestFile168.txt TestFile169.txt TestFile170.txt TestFile171.txt TestFile172.txt TestFile173.txt TestFile174.txt TestFile175.txt TestFile176.txt TestFile177.txt TestFile178.txt TestFile179.txt TestFile180.txt TestFile181.txt TestFile182.txt TestFile183.txt TestFile184.txt TestFile185.txt TestFile186.txt TestFile187.txt TestFile188.txt TestFile189.txt TestFile190.txt TestFile191.txt TestFile192.txt TestFile193.txt TestFile194.txt TestFile195.txt TestFile196.txt TestFile197.txt TestFile198.txt TestFile199.txt TestFile200.txt TestFile201.txt TestFile202.txt TestFile203.txt TestFile204.txt TestFile205.txt TestFile206.txt TestFile207.txt TestFile208.txt TestFile209.txt TestFile210.txt TestFile211.txt TestFile212.txt TestFile213.txt TestFile214.txt TestFile215.txt TestFile216.txt TestFile217.txt TestFile218.txt TestFile219.txt TestFile220.txt TestFile221.txt TestFile222.txt TestFile223.txt TestFile224.txt TestFile225.txt TestFile226.txt TestFile227.txt TestFile228.txt TestFile229.txt TestFile230.txt TestFile231.txt TestFile232.txt TestFile233.txt TestFile234.txt TestFile235.txt TestFile236.txt TestFile237.txt TestFile238.txt TestFile239.txt TestFile240.txt TestFile241.txt TestFile242.txt TestFile243.txt TestFile244.txt TestFile245.txt TestFile246.txt TestFile247.txt TestFile248.txt TestFile249.txt TestFile250.txt
于 2015-10-09T21:16:03.853 回答