私の問題にタイトルを付ける方法がわかりません(できるだけ試してみました)が、問題があるのは試してみるときですファイル名を読み込み、私が書いたバックアップスクリプトでそれらを使うのです。私はもともとファイル名に&のファイルがないことをテストしていました。 )今までは問題があるだろうということを理解ファイル名に「&Batch」が含まれています
ここでは、以下の例では、コール件まで使用されているコードの一部です:。
:backup2
if %DEBUG%=="t" echo Begin backup part 2
for %%? in ("!FILEREADIN!") do (
SET "FILENAME=%%~n?%%~x?"
SET "BACKUPFQP=%%~f?"
SET "BACKUPLAST=%%~t?"
call :getlength FILELENGTH "!FILENAME!"
とにかく一部私はに実行しています私私がファイル名の長さ(スクリプトの別のセクションで使用される)を取得するためにコード内のファイル名で作業しているときにssueを使用します。私はそこに、通常はコマンドとして&のスタッフ権を使用しようとバッチスクリプトのエラーを持っていないために&年代をエスケープするが、1つ(または複数のファイルを読み込む際にされていることを知っている
:getlength
SETLOCAL enabledelayedexpansion
if %DEBUG%=="t" echo %2 parsed... %%2 delayed... !%2!
SET "LENGTH=!%1!"
SET "STRING=%2"
REM need to correct the string for the "" that get added from passing in %2
REM Issue arises with this part below when working on a file name with a &
SET "STRING=!STRING:~1,-1!"
:getlengthwhile
if %DEBUG%=="t" echo Length !LENGTH!
if %DEBUG%=="t" echo String left: !STRING!
SET /a "LENGTH+=1"
REM Issue here too when working with file names with &'s
SET "STRING=%STRING:~1%"
if %DEBUG%=="t" echo Length now !LENGTH!
if %DEBUG%=="t" echo String now left: !STRING!
if %DEBUG%=="t" pause
if not ["%STRING%"]==[""] (
if %DEBUG%=="t" echo Continuing source length calculation
Goto :getlengthwhile
) else (
if %DEBUG%=="t" echo Length calculated)
ENDLOCAL & SET TEMPNUM=%LENGTH%
SET "%~1=%TEMPNUM%"
if %DEBUG%=="t" echo !%1!
if %DEBUG%=="t" pause
goto :eof
)その名の通りに私はそれを正しく働かせるには?
は、ここで私はとの問題を抱えているファイル名の例だと、私は私のスクリプト実行しているとき、何が起こる:言っ
File "E:\Projects\.\Abilities&Events.docx"
Press any key to continue . . .
Begin backup part 2
"Abilities&Events.docx" parsed... %2 delayed...
'Events.docx""' is not recognized as an internal or external command, operable program or batch file.
変数の周りにes。遅延拡張を使用してください – jeb
それは動作しません。私はすでに遅延拡張をしており、適切な長さを得るために変数の周りに引用符を付けることはできません。また、私がこのファイルをコピーしようとするとエラーが出るので、内部または外部のコマンドとして認識されません。 実行可能なプログラムまたはバッチファイルです。" –
トピックはありませんが、Powershellの使用については本当に考えなければなりません。 – Sean