Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 通过批处理脚本删除文件名中分隔符后的所有内容_Windows_Batch File_Cmd_Batch Rename - Fatal编程技术网

Windows 通过批处理脚本删除文件名中分隔符后的所有内容

Windows 通过批处理脚本删除文件名中分隔符后的所有内容,windows,batch-file,cmd,batch-rename,Windows,Batch File,Cmd,Batch Rename,假设我在Windows的“文件”目录中有一组文件、批处理脚本和子目录“数字”和“非数字”,如下所示: <Files> <Numbers> <NoNumbers> updatefiles.bat Alpha.txt Alpha #306.txt Beta.txt Gamma.txt Gamma #402.txt Epsilon.txt Epsilon #862.txt 试图切断最后

假设我在Windows的“文件”目录中有一组文件、批处理脚本和子目录“数字”和“非数字”,如下所示:

<Files>
    <Numbers>
    <NoNumbers>
    updatefiles.bat
    Alpha.txt
    Alpha #306.txt
    Beta.txt
    Gamma.txt
    Gamma #402.txt
    Epsilon.txt
    Epsilon #862.txt
试图切断最后4个字符和.txt扩展名:

对于“*.txt”中的%%i执行(设置fname=%%i)调用:重命名
后藤:eof
:重命名
::切掉最后9个字符
ren“%fname%”%fname:~0,-9%.json
后藤:eof
现在我需要将它们组合成一个使用相对路径的.bat

编辑2:以下是我提出的组合脚本:

setlocal
ren*.txt*.json
对于/f“eol=:delims=“%%f in('dir/b^| find“#“')请移动/Y“%%f”个数字”
对于/f“eol=:delims=“%%G in('dir/b^ find.json“'),请移动/Y“%%G”“非数字”
CD/D%~dp0\个数
对于“*.json”中的%%i,执行(设置fname=%%i)&调用:重命名
后藤:eof
:重命名
::切断最后10个字符,然后追加.json
ren“%fname%”%fname:~0,-10%.json
后藤:eof

它将.txt重命名为.json,将所有包含“#”的.json文件移到“Numbers”目录,将所有其他文件移到“NoNumbers”目录,更改为“Numbers”目录,删除每个文件的最后10个字符,并添加回.json扩展名。我确信有一种更有效的方法,但它现在就完成了我需要它做的事情。

从您的示例结果来看,您还希望不带“#”的文件按原样复制到非数字目录。对吗

此脚本通过将文件名与已将所有“#”字符替换为零的文件名进行比较来检测文件名中是否存在“#”字符

SETLOCAL ENABLEDELAYEDEXPANSION

FOR %%i IN ("*.txt") DO (
    SET "BNAME=%%~ni"
    SET "TNAME=!BNAME:#=!

    IF "!BNAME!" NEQ "!TNAME!" (
        REM A # was found
        REM NB: This assumes that there is a space before the #
        MOVE "%%~i" "NoNumbers\!TNAME:~0,-4!.json"
    ) ELSE (
        COPY /Y "%%~i" "NoNumbers\!BNAME!.json"
        MOVE "%%~i" "Numbers\!BNAME!.json"
    )
)

此脚本不检测文件名冲突。如果同时存在
BETA#101.txt
BETA#102.txt
会发生什么情况?

StackOverflow不是一种代码编写服务。您应该展示自己的初始尝试,并提出问题以识别bug和问题。在我最初的尝试中编辑,对不起!由于您现在已经发布了代码,突出的问题是批处理对
SET
语句中的空格敏感
SET FLAG=N
将名为“FLAG[Space]”的变量的值设置为“[Space]N”。由于代码块中没有更改
fname
,请使用
%
,而不是
感谢Magoo的提示,我已经将第二条语句改为使用%,它似乎正在工作-现在我需要将两者结合起来,并为“Numbers”目录中的文件执行第二个代码块
SETLOCAL ENABLEDELAYEDEXPANSION

FOR %%i IN ("*.txt") DO (
    SET "BNAME=%%~ni"
    SET "TNAME=!BNAME:#=!

    IF "!BNAME!" NEQ "!TNAME!" (
        REM A # was found
        REM NB: This assumes that there is a space before the #
        MOVE "%%~i" "NoNumbers\!TNAME:~0,-4!.json"
    ) ELSE (
        COPY /Y "%%~i" "NoNumbers\!BNAME!.json"
        MOVE "%%~i" "Numbers\!BNAME!.json"
    )
)