Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.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
Batch file 如何使用bat脚本创建带变音符号的文件/文件夹_Batch File_Encoding_Diacritics - Fatal编程技术网

Batch file 如何使用bat脚本创建带变音符号的文件/文件夹

Batch file 如何使用bat脚本创建带变音符号的文件/文件夹,batch-file,encoding,diacritics,Batch File,Encoding,Diacritics,我有一个bat文件,它读取文件中的行,然后根据给定的参数尝试创建文件或文件夹 问题是当它到达chars asă–ț2387;时,它就不起作用了 这是我的代码: IF "%1"=="" GOTO Final IF "%1"=="file" GOTO File IF "%1"=="folder" GOTO Folder :File for /f %%i in (files.txt) do echo. > %%i.rtf GOTO Final :Folder for /f "

我有一个bat文件,它读取文件中的行,然后根据给定的参数尝试创建文件或文件夹

问题是当它到达chars asă–ț2387;时,它就不起作用了

这是我的代码:

IF "%1"=="" GOTO Final
IF "%1"=="file" GOTO File
IF "%1"=="folder" GOTO Folder

:File
    for /f %%i in (files.txt) do echo. > %%i.rtf
GOTO Final

:Folder
    for /f "tokens=*" %%a in (folders.txt) do (
    mkdir "%%a"
    )
GOTO Final

:Final
到目前为止,我尝试使用此链接:

  • bat脚本是ANSI
  • CHCP 1250>NUL

  • 如何解决此问题?

    CHCP XXX
    放入批处理中,其中XXX是与文本文件(files.txt和folders.txt)编码匹配的代码页。请注意,您可以使用相当于UTF-8的
    CHCP 65001
    ,它应该可以毫无问题地处理大多数双字符。

    避免在文件和文件夹名称中使用重音字符。否则,在windows命令行中保证

    md files   2>NUL
    pushd files
    md unASCII 2>NUL
    chcp 852 >nul
    echo ěščřžýáíé-852>diacritic--852.txt
    chcp 1250 >nul
    echo ěščřžýáíé1250>diacritic-1250.txt
    
    chcp 1250 >nul
    findstr /R "^" "diacritic-*.txt"
    for %G in (diacritic*.txt) do @for /F %g in (%G) do @echo %G:%g
    for %G in (diacritic*.txt) do @for /F %g in (%G) do @echo(%~nG:%g>"unASCII\%gANSI.txt"
    chcp 852 >nul
    findstr /R "^" "diacritic-*.txt"
    for %G in (diacritic*.txt) do @for /F %g in (%G) do @echo %G:%g
    for %G in (diacritic*.txt) do @for /F %g in (%G) do @echo(%~nG:%g>"unASCII\%g-OEM.txt"
    popd
    
    请注意,上面列出的
    CLI
    命令不是
    .bat
    代码片段。但是,在命令行窗口中复制和粘贴该文件会给出大致的下一个输出,显示创建和使用文件时的实际代码页必须相互协调。否则,可看到结晶莫吉贝克,例如参见
    findstr/R“^”“diacritic-*.txt”

    我们已将
    ěšřýáí
    字符串(后跟CHCP编号)写入下一个文件:

    • files\diacritic--852.txt
      文件中的
    • files\diacritic-1250.txt
      文件中的
      字符串
    然后,我们使用这些字符串创建
    .txt
    名称模式的文件,其中

    • =
      diacritic-.txt
      文件中读取带变音符号的字符串
    • =
      -852
      1250
      :在其下写入
      diacritic-.txt
      文件的代码页
    • =
      -OEM
      ANSI
      :编写此文件的代码页名称的文本缩写(
      852
      1250
    让我们尝试再次在命令行窗口中使用最后四个文件:
    Copy&Paste
    以下代码段:

    chcp 437 >nul
    dir /B /S "files\unASCII\*.txt"
    for %G in (files\unASCII\ěščřžýáíé*.txt) do @echo %G
    findstr /S /R "^" "files\unASCII\ěščřžýáíé*.txt"
    
    chcp 1250 >nul
    for %G in (files\unASCII\ěščřžýáíé*.txt) do type "%G"
    chcp 852 >nul
    for %G in (files\unASCII\ěščřžýáíé*.txt) do type "%G"
    
    输出:我们可以一次又一次地看到mojibake:

    ==>chcp 437 >nul
    
    ==>dir /B /S "files\unASCII\*.txt"
    d:\bat\files\unASCII\ýÜŔ°×řßÝÚ1250-OEM.txt
    d:\bat\files\unASCII\ěščřžýáíé-852-OEM.txt
    d:\bat\files\unASCII\ěščřžýáíé1250ANSI.txt
    d:\bat\files\unASCII\Řçźý§ě ˇ‚-852ANSI.txt
    
    ==>for %G in (files\unASCII\ěščřžýáíé*.txt) do @echo %G
    files\unASCII\ěščřžýáíé-852-OEM.txt
    files\unASCII\ěščřžýáíé1250ANSI.txt
    
    ==>findstr /S /R "^" "files\unASCII\ěščřžýáíé*.txt"
    
    ==>
    ==>chcp 1250 >nul
    
    ==>for %G in (files\unASCII\ěščřžýáíé*.txt) do type "%G"
    
    ==>type "files\unASCII\ěščřžýáíé-852-OEM.txt"
    diacritic--852:Řçźý§ě ˇ‚-852
    
    ==>type "files\unASCII\ěščřžýáíé1250ANSI.txt"
    diacritic-1250:ěščřžýáíé1250
    
    ==>chcp 852 >nul
    
    ==>for %G in (files\unASCII\ěščřžýáíé*.txt) do type "%G"
    
    ==>type "files\unASCII\ěščřžýáíé-852-OEM.txt"
    diacritic--852:ěščřžýáíé-852
    
    ==>type "files\unASCII\ěščřžýáíé1250ANSI.txt"
    diacritic-1250:ýÜŔ°×řßÝÚ1250
    
    OOPS,为什么
    findstr
    没有输出?让我们使用

    chcp 1250 >nul
    findstr /S /R "^" "files\unASCII\*.txt"
    chcp 852 >nul
    findstr /S /R "^" "files\unASCII\*.txt"
    
    输出显示,
    findstr
    不仅在文件内容中,而且在文件名称中也会导致mojibake:

    ==>chcp 1250 >nul
    
    ==>findstr /S /R "^" "files\unASCII\*.txt"
    FINDSTR: Cannot open files\unASCII\ŤsR›zr ˇ‚1250-OEM.txt
    FINDSTR: Cannot open files\unASCII\escrzŤ˙­'-852-OEM.txt
    FINDSTR: Cannot open files\unASCII\escrzŤ˙­'1250ANSI.txt
    FINDSTR: Cannot open files\unASCII\RÎzŤäe?'-852ANSI.txt
    
    ==>chcp 852 >nul
    
    ==>findstr /S /R "^" "files\unASCII\*.txt"
    FINDSTR: Cannot open files\unASCII\ŹsRŤzráíé1250-OEM.txt
    FINDSTR: Cannot open files\unASCII\escrzŹ ş'-852-OEM.txt
    FINDSTR: Cannot open files\unASCII\escrzŹ ş'1250ANSI.txt
    FINDSTR: Cannot open files\unASCII\R╬zŹńeś?'-852ANSI.txt
    
    仅供参考:
    CHCP 65001
    UTF-8
    )也不能帮助。。。根据,Windows NTFS对象名称似乎是
    UTF-16
    编码的:

    在较新的文件系统上,例如
    NTFS
    exFAT
    UDFS
    ,以及
    FAT32
    , Windows将长文件名以Unicode格式存储在磁盘上。。。档案 系统将路径和文件名视为一个不透明的WCHARs序列

    此外:

    shell和文件系统有不同的要求。它是 可以使用shell用户使用的Windows API创建路径 接口无法正确解释


    @wOxxOm的可能副本,已经检查了该链接,并没有解决我的问题
    ==>chcp 1250 >nul
    
    ==>findstr /S /R "^" "files\unASCII\*.txt"
    FINDSTR: Cannot open files\unASCII\ŤsR›zr ˇ‚1250-OEM.txt
    FINDSTR: Cannot open files\unASCII\escrzŤ˙­'-852-OEM.txt
    FINDSTR: Cannot open files\unASCII\escrzŤ˙­'1250ANSI.txt
    FINDSTR: Cannot open files\unASCII\RÎzŤäe?'-852ANSI.txt
    
    ==>chcp 852 >nul
    
    ==>findstr /S /R "^" "files\unASCII\*.txt"
    FINDSTR: Cannot open files\unASCII\ŹsRŤzráíé1250-OEM.txt
    FINDSTR: Cannot open files\unASCII\escrzŹ ş'-852-OEM.txt
    FINDSTR: Cannot open files\unASCII\escrzŹ ş'1250ANSI.txt
    FINDSTR: Cannot open files\unASCII\R╬zŹńeś?'-852ANSI.txt