批处理移动脚本给出语法错误,不移动文件

时间:2019-05-31 17:30:55

标签: windows batch-file

我有the following脚本
与具有简单名称的文件配合使用。
但是我需要使用的文件具有以下名称模式:
(#.a#-##-##-## abcd-abcd-## abc_abcdef_a#-##-##)

基本上是字母,数字,一个句点,破折号,连字符和一个逗号的组合,没有空格
您看到#号的地方是数字。
起始编号(#。)从0-10000
文件名介于72到76个字符之间,具体取决于其数字ID。 它们都是相同的类型(但脚本不是扩展名也不重要)

它给出了错误:

该命令的语法不正确。

我的猜测是问题在于文件名以数字开头或名称中带有句点。

我无法删除任何字符,文件名本身也是数据的一部分。

我已尝试在文件顶部使用chcp 65001,但这没有什么不同。

我是非常新的批处理脚本,不确定如何绕过此问题。我尝试搜索该错误,但似乎是一个一般性错误,味精。

@echo off
set /a counter=1
set /a filesperfolder=100
cd dir\dir_main

:loopstart
set dirname=subdir%counter%
md %dirname%
echo %dirname%

dir /b | findstr /v /i "subdir*"> %temp%\temp.txt && for /l %%l in (1,1,%filesperfolder%) do @for /f "tokens=1,2* delims=:" %%a in ('findstr /n /r "^" %temp%\temp.txt ^| findstr /r "^%%l:"') do @move %%b %dirname%\%%b >nul

set /a counter=%counter%+1
for /f "tokens=*" %%a in ('type %temp%\temp.txt ^| find /c /v ""') do set _filesmoved=%%a
del %temp%\temp.txt
IF %_filesmoved% LSS 100 goto done

goto loopstart

:done
cls
echo All files were moved!!
pause
exit

1 个答案:

答案 0 :(得分:0)

我进去并删除了不同的字符,以查看导致该问题的特定组合。该问题是由逗号和文件名中的空格引起的。

使用它删除空格和逗号,并用破折号或连字符替换。句点,短划线和连字符不会引起此问题。

import Control.Applicative(liftA2)

degree :: Tree a -> Int
degree = maximum . liftA2 (:) length (map degree) . children

还找到了一个更简单的移动脚本

@echo off
setlocal enabledelayedexpansion
for %%a in (*, *) do (
  set file=%%a
  ren "!file!" "!file:, =_!"
)